如何在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
相关产品推荐
相关产品推荐

