【问题标题】:is it ok to pass async function where non async function needed?可以在需要非异步函数的地方传递异步函数吗?
【发布时间】:2021-12-02 07:38:23
【问题描述】:

如下所示,为预期非异步函数的参数提供了异步函数,但它起作用了,为什么?


function getCallback(param, callback) {
  setTimeout(() => {
    callback && callback(param);
  }, 1);
}

getCallback(13, async (param) => {
  console.log(param);
});

---
13

【问题讨论】:

  • 因为async function 表达式和function 表达式都创建了可调用的函数对象...为什么您认为它不起作用?
  • getCallback 不会对callback 的返回值做任何事情,因此callback 是否返回promise 不受影响。从外部看,返回一个 Promise 几乎是 async 函数的唯一显着特征。
  • 好吧,如果你的回调返回一些重要的东西。例如,如果回调需要一个数字,它就不起作用等等。

标签: javascript asynchronous async-await callback


【解决方案1】:

成功了,为什么?

因为async 函数只是一个返回承诺的函数,并且可以像任何其他函数一样被调用。你的getCallback 忽略了callback() 的返回值,所以不管它返回什么。

可以在不需要async函数的情况下传递async函数吗?

不,通常不能将async 函数(或另一个返回承诺的函数)传递给不希望回调返回承诺的函数。 Promise 不应该被忽略,它们应该是.then()-chained 或awaited,它们需要特殊的错误处理。如果getCallback 不处理(承诺)错误,则不得传递错误的回调。

【讨论】:

  • 谢谢~我假设'async'是一种返回像python这样的对象的构建器。
猜你喜欢
  • 2019-08-18
  • 2014-06-14
  • 1970-01-01
  • 2022-11-16
  • 2015-12-01
  • 2011-12-30
相关资源
最近更新 更多