【发布时间】:2021-08-30 21:52:41
【问题描述】:
promo()
.then((e) => console.log("finished everything"))
.catch((e) => console.log("failed everything"))
.finally((e) => console.log("done", e));
function promo() {
console.log("awaiting promise");
return new Promise((resolve, reject) => {
setTimeout((e) => {
console.log("done with first promise");
resolve("done");
}, 2000);
}).then((e) => {
console.log("starting second promise");
new Promise((resolve) => {
setTimeout((e) => {
console.log("done with second promise");
resolve("done2");
}, 2000);
});
});
}
我怎样才能使 promo() 在第二个 .then() 完成之前不会完成?现在它会在第一个 Promise 结束后立即返回它,并且在 finally() 之后触发 .then();
这是输出:
awaiting promise
done with first promise
starting second promise
finished everything
done
done with second promise
但我期望的是:
awaiting promise
done with first promise
starting second promise
done with second promise
finished everything
done
【问题讨论】:
-
为什么会这样?
-
因为它返回一个带有 .then() 的承诺,这也是我想要它做的,我也几乎不明白承诺是如何工作的
-
你需要
returnthen() 回调中的promise,当它检测到一个promise被返回时,它会等待那个promise完成后再继续
标签: javascript asynchronous promise