Javascript 如何同步这3个基于承诺的函数?
如何同步这3个承诺返回函数(例如,在其他函数中)?我想得到以下输出->开始->结束(2秒)…2秒(3秒)…3秒(4秒)…4秒->结束。我试过发电机,但我的输出不是那样的(可能是我做错了什么)Javascript 如何同步这3个基于承诺的函数?,javascript,async-await,es6-promise,Javascript,Async Await,Es6 Promise,如何同步这3个承诺返回函数(例如,在其他函数中)?我想得到以下输出->开始->结束(2秒)…2秒(3秒)…3秒(4秒)…4秒->结束。我试过发电机,但我的输出不是那样的(可能是我做错了什么) 首先,改变函数以回报它们的承诺。例如: function resolveAfter2Seconds() { return new Promise(resolve => { // <------ added return statement setTimeout(() => {
首先,改变函数以回报它们的承诺。例如:
function resolveAfter2Seconds() {
return new Promise(resolve => { // <------ added return statement
setTimeout(() => {
resolve('resolved 2');
console.log('2')
}, 2000);
});
}
或使用异步/等待语法:
async function exampleFunction() {
await resolveAfter2Seconds();
await resolveAfter3Seconds();
await resolveAfter4Seconds();
}
您可能希望尝试链接以获得顺序输出:
resolveAfter2Seconds()
.then(() => resolveAfter3Seconds())
.then(() => resolveAfter4Seconds())
注:别忘了让那些函数返回承诺。FYI:
。然后(()=>resolveAfter3Seconds())
=。然后(resolveAfter3Seconds)
FYI:。然后(()=>resolveAfter3Seconds())
。然后(resolveAfter3Seconds)@NicholasTower你的观点也很好,但是在这个特殊的例子中,行为是一样的,因为这些函数不接受任何参数。是的,我删除了我的评论,因为这并不重要。感谢@RandyCasburn展示了一个更简洁的替代方案。这很有趣,但我用同样的方式做了,结果没有用。现在,我用then()粘贴了您的解决方案,它可以正常工作。谢谢你(也许我以前做过一些奇怪的事情)
async function exampleFunction() {
await resolveAfter2Seconds();
await resolveAfter3Seconds();
await resolveAfter4Seconds();
}
resolveAfter2Seconds()
.then(() => resolveAfter3Seconds())
.then(() => resolveAfter4Seconds())