You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 06:13:15