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
})
}