如何实现仅在多个Promise全部resolve后才触发目标方法?
解决方法:用
Promise.all()等待多个Promise全部完成 你猜的太对了!Promise.all()就是专门用来处理这种「需要等多个Promise都成功resolve后,再执行后续逻辑」的场景,正好能解决你现在遇到的问题。
为什么之前的写法不符合预期?
你之前的代码应该是给两个Promise分别绑定了then回调,或者误用了Promise.race()(它会在任意一个Promise完成时就触发回调),所以才会出现“只要其中一个resolve就触发secondMethod”的情况。
正确的实现方式
把你的firstRandomNumber和secondRandomNumber这两个Promise放进Promise.all()的数组参数里,它会耐心等待数组里所有Promise都成功resolve后,才会执行后续的then回调,还会把每个Promise的返回结果按顺序传给你:
// 先模拟你的两个Promise(示例) const firstRandomNumber = new Promise((resolve) => { setTimeout(() => resolve(Math.random()), 1200); }); const secondRandomNumber = new Promise((resolve) => { setTimeout(() => resolve(Math.random()), 1800); }); // 用Promise.all等待两个Promise都完成 Promise.all([firstRandomNumber, secondRandomNumber]) .then(([firstVal, secondVal]) => { // 只有当两个Promise都resolve后,才会走到这里调用secondMethod secondMethod(firstVal, secondVal); }) .catch((err) => { // 如果任意一个Promise失败(reject),会立刻进入这里处理错误 console.error('有一个Promise出错了:', err); }); function secondMethod(num1, num2) { console.log('两个随机数都拿到啦:', num1, num2); }
几个关键细节
Promise.all()接收一个Promise数组,返回一个新的Promise对象。- 只有当数组里所有Promise都成功resolve时,新Promise才会resolve,结果是一个包含所有Promise返回值的数组(顺序和你传入的Promise数组一致)。
- 如果数组里有任意一个Promise reject,新Promise会立刻reject,并且抛出那个reject的错误。
这样修改之后,secondMethod就只会在两个Promise都成功resolve之后才被触发,完全符合你的需求啦!
内容的提问来源于stack exchange,提问作者randouser
相关产品推荐
相关产品推荐

