为什么await Promise.all()后仍存在pending状态的Promise?
问题根因
你传入Promise.all()的promisesArray数组的元素不是Promise类型,而是普通对象,Promise.all只会等待数组中本身是Promise的元素执行完成,不会主动处理对象内部嵌套的未完成Promise。
具体错误分析
你写的map逻辑返回的是普通对象,而非Promise:
const promisesArray = OldDataArray.map((item) => { let newData = downloadMoreDetails(item.id, item.group); // 这里得到的是未完成的Promise return { // 直接返回普通对象,对象内data属性还是pending状态的Promise id: item.id, data: newData, }; });
此时promisesArray是对象数组,不是Promise数组,await Promise.all(promisesArray)会直接把这些普通对象当成已完成的值返回,不会等待对象内部data对应的Promise执行完成,因此最终输出的结果里data仍然是pending状态。
修复方案
调整map逻辑,让数组元素为Promise类型,Promise.all就会等待所有异步操作完成再返回结果:
const storeData = async (OldDataArray) => { try { const promisesArray = OldDataArray.map(async (item) => { // 等待异步请求完成,拿到真实的data值再组装对象 let newData = await downloadMoreDetails(item.id, item.group); return { id: item.id, data: newData, }; }); const newDataArray = await Promise.all(promisesArray); return newDataArray; } catch (error) { console.log(error) } };
修改后promisesArray的元素是async函数返回的Promise实例,Promise.all会等待所有Promise执行完成,最终返回的newDataArray里的data就是请求完成后的实际值,不会再出现pending状态。
内容的提问来源于stack exchange,提问作者yumba
相关产品推荐
相关产品推荐

