向要求非async函数的参数传入async函数是否合法可行?
问题原因解释
- JavaScript中的
async函数本质是普通函数的语法糖,除了调用后会默认返回一个Promise对象之外,和普通函数的调用逻辑没有任何区别,不存在只能在特定场景使用的语法限制。 - 你示例中的
getCallback函数对callback参数的唯一要求是「可调用的函数」,既没有要求处理callback的返回值,也没有限制callback必须是同步函数:- 定时器触发执行
callback(13)时,传入的async函数会正常执行内部逻辑,console.log(param)是同步执行的语句,所以13会正常打印输出 - async函数执行完成后返回的Promise对象,因为代码没有接收和处理这个返回值,会被直接忽略,不会触发任何报错,也不会干扰现有逻辑的运行。
- 定时器触发执行
补充说明:只有当你需要获取async函数内部异步操作的返回结果,或者需要捕获async函数内部抛出的异常时,才需要对它返回的Promise做await或者.then()/.catch()处理,除此之外你完全可以把async函数当做普通回调函数传入使用,不会有任何问题。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

