Javascript 如何同步这3个基于承诺的函数?

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(() => {

如何同步这3个承诺返回函数(例如,在其他函数中)?我想得到以下输出->开始->结束(2秒)…2秒(3秒)…3秒(4秒)…4秒->结束。我试过发电机,但我的输出不是那样的(可能是我做错了什么)


首先,改变函数以回报它们的承诺。例如:

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())