【发布时间】:2018-09-28 02:10:18
【问题描述】:
我遇到了 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
请有人指出我在这方面哪里出错了?
【问题讨论】:
-
您还没有等待您致电
foo。 -
你就在那里,但这仍然不能解释为什么 foo() 返回
undefined而不是"foo"。 -
因为你破坏了底层的承诺链。
-
你怎么能期望
"foo"被输出到控制台?你认为你的代码的哪一行输出了那个?你所有的console.log都是数字的,你不是一次console.log('foo')
标签: javascript asynchronous async-await ecmascript-2017