Skip to content

常见问题

什么是异步函数?

一个函数即使没有 async 关键字,如果它返回一个 Promise,我们也可以用它来处理异步操作,但它不是异步函数(在语言定义上)。 所以,只有用 async 定义的函数才是异步函数,它的返回值会被包装成 Promise(即使返回的是非 Promise 值,也会被包装成一个已解决或者已拒绝的 Promise)。 而一个普通函数如果返回 Promise,我们可以说它返回了一个 Promise,用于异步操作,但它本身不是异步函数(没有使用 async 定义)。

所以异步函数是一个统称, 按照规范来说, 只有一个函数标注了 async 后才是一个异步函数, 普通函数返回一个 Promise 不能够标准的称为是异步函数, 只是比较笼统的叫法。

查看代码
js
// ✅ 异步函数的标志​​:函数声明前的 async 关键字
const fn = async () => {
  return 666;
};
async function fn() {
  return 666;
}

// ❌ ​​非标志​​:返回值是否为 Promise(普通函数也可返回 Promise)
const fn = () => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(666);
    }, 1500);
  });
};
async function fn() {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(666);
    }, 1500);
  });
}

贡献者 ☘️

Flame-00

Flame-00

Creator