我如何等待 2 个承诺完成,再运行另一个?

我正在尝试通过以下方式实现两个承诺:

Promise.all([...])

但他们都有自己的.then

Promise.all([promise1().then(...), promise2().then(...)])

.then我希望在 Promise.all 上运行另一个,同时也在等待两者.then返回(如果有任何意义的话)。

这是一个显示我的意思的小提琴。


回首忆惘然
浏览 115回答 2
2回答

慕标5832272

如果你跑function get1() {  return new Promise((r)=>setTimeout(() => r(),3000))}function rejection() {/*Handle rejection*/}function doAll(...ps) {    return Promise.all(ps.map(rejection))}(async () => {  var p1 = get1().then(()=>console.log("1"));  var p2 = get1().then(()=>console.log("2"));    Promise.all([p1, p2]).then(()=>{    console.log("3")  })})()那么结果是正确的123If you runfunction get1() {  return new Promise((r)=>setTimeout(() => r(),3000))}function rejection() {/*Handle rejection*/}function doAll(...ps) {    return Promise.all(ps)}(async () => {  var p1 = get1().then(()=>console.log("1"));  var p2 = get1().then(()=>console.log("2"));    doAll(p1, p2).then(()=>{    console.log("3")  })})()然后你又得到正确的123结果,问题出在ps.map(rejection). 让我们来看看:function get1() {  return new Promise((r)=>setTimeout(() => r(),3000))}function rejection() {/*Handle rejection*/}function doAll(...ps) {    console.log(ps);  console.log(ps.map(rejection));    return Promise.all(ps.map(rejection));}(async () => {  var p1 = get1().then(()=>console.log("1"));  var p2 = get1().then(()=>console.log("2"));    doAll(p1, p2).then(()=>{    console.log("3")  })})()输出两个元素的数组,两者都是undefined微不足道的评估。因为ps.map(rejection)是一个箭头函数,它命名它的参数为 rejection 并且不返回任何东西。

胡说叔叔

如果你想在 javascript 中使用异步操作,你可以使用 3 种方法。打回来承诺异步/等待为了实现您想要的确切内容,最好和优化的方法是使用 async/await 方法。你可以这样做:async function getAllData(){      const p1 = await promise1;      const p2 = await promise2;             }现在 getAllData 返回 Promise,您可以使用 .then() 获取结果并使用 .catch() 获取错误。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript