我遇到了JavaScript的async / await函数问题。这是在我无法共享源代码的内部应用程序上发生的,但我对我的问题进行了快速通用的再现:
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function baz(input) {
console.log("4");
await sleep(1000);
console.log("5");
return input;
}
async function bar(input) {
console.log("3");
return await baz(input);
}
async function foo() {
console.log("2");
const foo = await bar("foo");
return foo;
}
console.log("1");
foo();
console.log("6");

我希望这会在4
和5
之间等待一秒钟后返回以下内容:
1
2
3
4
5
6
"foo"
相反,在Chrome 64.0.3282.167和Firefox 58.0.2的控制台中尝试此操作后,我会收到:
1
2
3
4
6
undefined
5
有人可以指出我在哪里出错吗?
答案 0 :(得分:2)
顶级正在同步运行(一如既往) - 在继续foo();
之前,它不会等待console.log("6");
解析。将foo
的调用包含在异步和await
内。如果要稍后显示它,还需要保存foo
的返回值:
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function baz(input) {
console.log("4");
await sleep(1000);
console.log("5");
return input;
}
async function bar(input) {
console.log("3");
return await baz(input);
}
async function foo() {
console.log("2");
const foo = await bar("foo");
return foo;
}
(async () => {
console.log("1");
const str = await foo();
console.log("6");
console.log(str);
})();