在需要非异步函数的地方传递异步函数可以吗?

is it ok to pass async function where non async function needed?

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


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

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

---
13

It worked, why?

因为 async 函数只是一个 return 承诺的函数,可以像任何其他函数一样调用。您的 getCallback 忽略了 callback() 的 return 值,因此 return 是什么并不重要。

Is it ok to pass async function where no async function is needed?

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