- 写了一个类想先读取一个文件的数据,然后将数据存储到数据库中。
-
saver.connectMongo() .then(async () => { const data = await saver.getFileContent(filename); console.log(data); saver.saveCodeToMongo1(data); });
这段代码运行的结果是 data 先输出了,也就是输出了
undefined
,有没有大佬帮忙解读一下为什么会出现这种情况?
saver.connectMongo()
.then(async () => {
const data = await saver.getFileContent(filename);
console.log(data);
saver.saveCodeToMongo1(data);
});
这段代码运行的结果是 data 先输出了,也就是输出了 undefined
,有没有大佬帮忙解读一下为什么会出现这种情况?
简单把问题和答案有一个小 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
10 回答11.2k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
await 后边的方法必须返回 promise,估计问题是你的saver.getFileContent这个方法返回值有问题