JavaScript如何用forEach收集数组每个元素的Promise并返回给调用方
修改方案
你当前的问题是每次循环都会覆盖promiseChain变量,导致最终只返回最后一个Promise。要收集所有Promise,只需要用数组存储每个调用的结果即可:
方式1:返回所有Promise组成的数组
createTypes({types: [type1, type2, type3]}, false).as('createdTypes'); const createTypes = ({ count = 1, types = new Array(count).fill() }, skip = true) => { const promises = []; types.forEach(type => { // 根据skip参数调用对应方法,把返回的Promise存入数组 const currentPromise = skip ? cy.createType(type) : cy.createType(type, false); promises.push(currentPromise); }); return promises; }
这种方式会直接返回一个包含所有Promise的数组,调用方可以单独处理每个Promise的状态和结果。
方式2:返回统一的Promise(等待所有操作完成)
如果需要等待所有cy.createType操作都完成后再返回结果,可以用Promise.all将数组转换为一个Promise,它会在所有子Promise都resolve后,返回一个包含所有结果的数组:
createTypes({types: [type1, type2, type3]}, false).as('createdTypes'); const createTypes = ({ count = 1, types = new Array(count).fill() }, skip = true) => { const promises = []; types.forEach(type => { const currentPromise = skip ? cy.createType(type) : cy.createType(type, false); promises.push(currentPromise); }); return Promise.all(promises); }
补充说明
- 两种方式的核心都是用数组替代单个变量,避免Promise被覆盖
- 针对Cypress场景:
cy.createType如果返回的是Cypress的Chainable对象,也能和Promise.all兼容,因为Chainable实现了Promise的then接口
内容的提问来源于stack exchange,提问作者Harika
相关产品推荐
相关产品推荐

