首页 > 解决方案 > Javascript 使用 async/await 传递/链接一个 Promise

问题描述

是否可以在 Javascript 中等待已发送但可能尚未解决的承诺?

async function doStuff(nth) {
  setTimeout(() => console.log(nth), 2000);
}


async function waitForMe(prom, callback, nth) {
  await prom;
  await callback(nth);
}


const v = doStuff(1);
waitForMe(v, doStuff, 2);

上面的代码是并行执行的;对于我的问题,用户可能会在运行时再次调用 doStuff,然后才能完成并且必须按顺序执行。

标签: javascriptasync-await

解决方案


你不能这样吗?

function doStuff(nth) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log(nth);
      resolve("done");
    }, 2000);
  });
}

async function waitForMe(prom, callback, nth) {
  await prom;
  await callback(nth);
}

const v = doStuff(1);
waitForMe(v, doStuff, 2);


推荐阅读