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

如何在JavaScript中传入动态数组并返回多个Promise

如何在JavaScript中传入动态数组并返回多个Promise

嘿,我来帮你理顺这个问题!你想要实现的功能其实用Promise.all()就能轻松搞定,而且写法比你现在尝试的要简洁直观很多。

首先看你的myFunction,它本身已经是一个接收参数并返回Promise的函数了,那我们只需要把数组里的每个元素都传入这个函数,生成一个Promise数组,再用Promise.all()来统一处理这些Promise就行。

给你看修正后的完整代码:

function myFunction(input) {
    return Promise.resolve(input);
}

function callMyFunction(inputArray) {
    // 先做个输入校验,避免非数组参数导致出错
    if (!Array.isArray(inputArray)) {
        // 这里可以根据需求返回resolved的空数组,或者抛出错误
        return Promise.resolve([]);
    }
    // 用map遍历数组,给每个元素调用myFunction生成Promise
    const promisesArray = inputArray.map(item => myFunction(item));
    // Promise.all会等待所有Promise完成,返回一个汇总结果的Promise
    return Promise.all(promisesArray);
}

// 调用示例
const inputArray = [1, 2, 3, 4, 5];
callMyFunction(inputArray)
    .then(results => {
        console.log('所有Promise执行完成,结果:', results); // 输出 [1, 2, 3, 4, 5]
    })
    .catch(error => {
        console.error('有Promise执行失败:', error);
    });

简单解释下关键点:

  • inputArray.map(item => myFunction(item)):这一步会遍历数组的每个元素,对每个元素调用myFunction,最终得到一个由Promise组成的数组,顺序和原数组完全一致。
  • Promise.all(promisesArray):这个方法会等待数组里所有的Promise都成功resolve,然后返回一个新的Promise,它的resolve结果是所有Promise结果组成的数组。如果其中任何一个Promise reject了,Promise.all()会立刻触发reject,返回对应的错误。

另外说下你原来代码里的小问题:

  • 你写的Promise.all[.....]是语法错误,Promise.all()是函数调用,要用括号而不是方括号。
  • 你定义的invokedFunction其实没必要,因为myFunction本身就可以直接接收参数并返回Promise,不需要额外包装成另一个函数。

备注:内容来源于stack exchange,提问作者SoftwareDveloper

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 13:09:36