Javascript 如何进行多个异步等待调用

Javascript 如何进行多个异步等待调用,javascript,Javascript,我试图基于多个承诺的响应构建一个对象,但我注意到只有第一个承诺在实际执行,而第二个承诺被忽略。实现这一目标的最佳实践是什么 if (goldenListKeys[0].name === 'date') { const date = moment('07-01-2019', 'YYYY-MM-DD').format('MM/DD/YYYY'); _.assign(tmpObj, { inputData: { [goldenListKeys[0].name]: date } }); tr

我试图基于多个承诺的响应构建一个对象,但我注意到只有第一个承诺在实际执行,而第二个承诺被忽略。实现这一目标的最佳实践是什么

if (goldenListKeys[0].name === 'date') {
  const date = moment('07-01-2019', 'YYYY-MM-DD').format('MM/DD/YYYY');
  _.assign(tmpObj, { inputData: { [goldenListKeys[0].name]: date } });
  try {
    await this.plansApi
      .compileFields({ tmpObj, carrier, benefitQuery })
      .catch(error => {
        value = error.response['invalid-selection'];
        console.log(`One: ${value}`);
      });
  } catch (err) {}
}
if (goldenListKeys[1].name === 'state') {
  console.log('Here');
  _.assign(tmpObj, {
    inputData: { ...tmpObj, [goldenListKeys[1].name]: 'NC' },
  });
  try {
    await this.plansApi
      .compileFields({ tmpObj, carrier, benefitQuery })
      .catch(error => {
        value = error.response['invalid-selection'];
        _.assign(goldenListKeys, { filler: value });
        console.log(`Two: ${value}`);
      });
  } catch (err) {}
}

您似乎错过了async/await的一个基本特性

异步函数可以包含一个等待表达式,该表达式暂停异步函数的执行并等待传递的承诺的解析,然后恢复异步函数的执行并返回解析的值

关键部分是暂停函数调用内部的执行。因此,在第一个承诺得到解决之前,您的下一个if声明不会被考虑

这通常是我喜欢使用Promise.all函数的地方

这就是我修改代码的方式(我知道它不使用async/await,但它应该可以实现您的目标)


await
只能作为
async
函数的直接子函数嵌套工作。感谢宝贵的反馈。我要试试这个,因为它看起来确实很有希望。我知道你在那里做了什么
function yourFunction(){

    let myPromiseArray = [];

    if (goldenListKeys[0].name === 'date') {

        const date = moment('07-01-2019', 'YYYY-MM-DD').format('MM/DD/YYYY');

        _.assign(tmpObj, { inputData: { [goldenListKeys[0].name]: date } });

        myPromiseArray.push(his.plansApi
            .compileFields({ tmpObj, carrier, benefitQuery }))
    }

    if (goldenListKeys[1].name === 'state') {

        _.assign(tmpObj, {
            inputData: { ...tmpObj, [goldenListKeys[1].name]: 'NC' },
        });

        myPromiseArray.push(this.plansApi
            .compileFields({ tmpObj, carrier, benefitQuery }))

    }

    Promise.all(myPromiseArray).then((resultArray)=>{
        //do something with results
    }).catch(errorArray => {
        //handle Errors
    })
}