Javascript 等待而不是等待?
我有多个异步函数,我想一个接一个地执行,但是下一个函数是在前一个函数完成之前执行的Javascript 等待而不是等待?,javascript,asynchronous,promise,Javascript,Asynchronous,Promise,我有多个异步函数,我想一个接一个地执行,但是下一个函数是在前一个函数完成之前执行的 async function x() { for (...) { console.log("awaiting" + i) function fooPromise() { return new Promise(function(resolve) { foo(); resolve(); }); } awai
async function x() {
for (...) {
console.log("awaiting" + i)
function fooPromise() {
return new Promise(function(resolve) {
foo();
resolve();
});
}
await fooPromise();
console.log("awaited" + i)
}
}
async foo(){
for(...){
await sleep(1500);
}
console.log("finished");
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
预期产出应为:
等待1已完成
等待1
等待2
已完成
等待2
等待3
已完成
等待3 但我得到的是: 等待1
等待1
等待2
等待2
等待3
等待3
已完成
已完成
完成 我对使用Promissions和async还比较陌生,所以如果有任何帮助,我将不胜感激
return new Promise(function(resolve) {
foo();
resolve();
});
传递给promise构造函数的代码立即同步运行。构造函数通常用于获取使用回调编写的代码,然后将回调包装成承诺(如您的示例中所示)
因此,此代码将立即调用foo,忽略由foo
返回的承诺,然后立即解析新承诺。事实上,foo
以后做事情对这个承诺没有影响
因为foo
已经返回了一个承诺(因为它是一个异步函数),所以没有必要将它包装成一个新的承诺。您可以将代码更改为:
异步函数x(){
for(设i=1;i该
函数fooPromise()的意义是什么){
以及它所构造的承诺?是的,这仍然像以前一样给出了错误的输出真的吗?我已经将它编辑成一个片段,并且它输出了我运行它时您所要求的内容。@TDUK运行答案中的代码片段,看看它是如何工作的。您确定在自己的代码中尝试此操作时没有忘记等待
吗?应该提到这一点,但有多个睡眠,而不仅仅是一个,如果这改变了任何东西,只要等待它们,就没有其他改变,只会让它花费更长的时间。我编辑了我的代码片段,每个foo包含两个睡眠,输出仍然是您所要求的。