gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:32:45 24 4
gpt4 key购买 nike

我正在尝试基于多个 promise 的响应构建一个对象,但我注意到实际上只有第一个 promise 在处理,而第二个 promise 被忽略了。让这项工作发挥作用的最佳做法是什么?

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 的一项基本功能。

An async function can contain an await expression that pauses the execution of the async function and waits for the passed Promise's resolution, and then resumes the async function's execution and returns the resolved value.

关键部分是函数调用内的执行被暂停。因此,在第一个 promise 解决之前,您的下一个 if 语句将不会被考虑。

来自 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

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

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

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

关于javascript - 如何进行多个异步等待调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56266197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com