JavaScript async/await 没有正确等待?
JavaScript async/await not awaiting properly?
我在使用 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
之间等待一秒钟,return 以下内容:
1
2
3
4
5
6
"foo"
相反,在 Chrome 64.0.3282.167 和 Firefox 58.0.2 的控制台中尝试此操作后,我收到此消息:
1
2
3
4
6
undefined
5
有人能指出我哪里错了吗?
顶层是 运行 同步(一如既往)- 它不会等待 foo();
解决后再继续 console.log("6");
。将 foo
的调用包装在 async 和 await
中。如果要稍后显示,还需要保存foo
的return值:
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);
})();
我在使用 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
之间等待一秒钟,return 以下内容:
1
2
3
4
5
6
"foo"
相反,在 Chrome 64.0.3282.167 和 Firefox 58.0.2 的控制台中尝试此操作后,我收到此消息:
1
2
3
4
6
undefined
5
有人能指出我哪里错了吗?
顶层是 运行 同步(一如既往)- 它不会等待 foo();
解决后再继续 console.log("6");
。将 foo
的调用包装在 async 和 await
中。如果要稍后显示,还需要保存foo
的return值:
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);
})();