为啥这里的 async/await 不生效?

  1. 写了一个类想先读取一个文件的数据,然后将数据存储到数据库中。
  2. saver.connectMongo()
      .then(async () => {
        const data = await saver.getFileContent(filename);
        console.log(data);
        saver.saveCodeToMongo1(data);
      });

    这段代码运行的结果是 data 先输出了,也就是输出了 undefined,有没有大佬帮忙解读一下为什么会出现这种情况?

阅读 8.2k
3 个回答

await 后边的方法必须返回 promise,估计问题是你的saver.getFileContent这个方法返回值有问题

saver.getFileContent 代码有问题,你排查下这个方法的返回值

简单把问题和答案有一个小 demo 说明一下:

如果在 async 函数中没有返回 Promise 对象

async function foo() {
  let data;
  setTimeout(() => {
    data = 1;
    console.log(data); // 1
    return data;
  })
}

(async () => {
  const data = await foo();
  console.log(data); // undefined
})();

// 结果:
// undefined
// 1

改成正确写法之后

async function foo() {
    let data;
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      data = 1;
      resolve(data);
    });
  });
}

(async () => {
  const data = await foo();
  console.log(data);
})();

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