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
)-这会污染全局范围或在严格模式下抛出错误