以下代码输出什么?为什么?

const token = (async () => {
  const token = await new Promise(resolve => {
    setTimeout(() => resolve("abc"), 2000);
  });
  console.log("1", token);
  return token;
})();

console.log("2", token);
阅读 1.6k
3 个回答

const token = (async () => {
  const token = await new Promise(resolve => {
    setTimeout(() => resolve("abc"), 2000);
  });
  console.log("1", token);  // 1  abc
  return token;  // 无卵用语句  async函数自动 return Promise
})();

console.log("2", token);  // 2 Promise对象

在async function里面,return await没用。由于async function总是包含返回值Promise.resolve,除非在总体 Promise 解析或拒绝之前添加额外时间,否则实际上return await不会执行任何操作。这种模式几乎肯定是因为程序员无视async function的返回语义。

先2后1

2里边的token是一个变量赋值所以不用等异步执行完毕
因为1里边有token 而token在异步函数作用域里边,需要异步代码执行结束才会有结果

打开chrome ,按F12,把代码输到控制台里按回车

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题