Javascript 等待并返回对象中所有已解析的承诺值
我有一个对象,我们称之为Javascript 等待并返回对象中所有已解析的承诺值,javascript,promise,async-await,Javascript,Promise,Async Await,我有一个对象,我们称之为pages,其中每个键(typeOne,typeTwo,等等)的值是一个对象数组,而该对象中名为formData的键是一个待定的承诺。我想本质上更新页面对象,使每个表单数据键都是承诺的解析值 通过基本上映射页面中的每个值,我成功地做到了这一点。但是,这很慢,因为在移动到下一个集合之前,似乎要等待并解析每个类型*的数组集合,如果这有意义的话 (异步()=>{ 让页面={ 第一类:[ { formData:承诺 }, ... ], ... } ... 用于(按键类型(页)){
pages
,其中每个键(typeOne
,typeTwo
,等等)的值是一个对象数组,而该对象中名为formData
的键是一个待定的承诺。我想本质上更新页面
对象,使每个表单数据
键都是承诺的解析值
通过基本上映射页面中的每个值,我成功地做到了这一点。但是,这很慢,因为在移动到下一个集合之前,似乎要等待并解析每个类型*
的数组集合,如果这有意义的话
(异步()=>{
让页面={
第一类:[
{
formData:承诺
},
...
],
...
}
...
用于(按键类型(页)){
pages[type]=Wait Promise.all(pages[type].map(异步页面=>{
page.formData=等待page.formData;
返回页面;
}));
}
...
//用书页做东西
})()
有没有一种干净的方法来编写它,这样它就可以一次等待所有承诺,然后用解析的值替换承诺?您需要两个承诺;一个用于迭代键,另一个用于迭代每页:
const resolvedPages = {};
await Promise.all(Object.entries(pages).map(([key, typeArr]) =>
Promise.all(typeArr.map(
// Wait for each individual Promise to resolve, then map to a new object
({ formData }) => formData.then(({ resolveValue }) => ({ formData: resolveValue }))
)
.then((resolvedArrOfObjs) => {
resolvedPages[key] = resolvedArr;
})
)
))
不需要迭代库
确保不要隐式创建全局变量,如使用for(type of
)-这会污染全局范围或在严格模式下抛出错误