我在forEach循环中调用了我的异步函数,如下所示:
foo {
list.forEach(function( field ) {
populateValues( field );
});
// here my list is returned incomplete
return list;
}
populateValues = async function ( field ) {
if ( field.someProp === true ) {
fields.val = await somePromise();
}
}
somePromise = function() {
return new Promise( resolve => {
fetchMyAPIExample().then( function( value ) {
resolve( value );
}
}
}
populateValues()正确地等待我的承诺,但是foo()不会等待populateValues返回列表,所以它返回我的列表不完整。
答案 0 :(得分:6)
您可能也想等待那里,这对于forEach不起作用但是for..of:
async function foo(){
for(var field of list){
await populateValues( field );
}
return list
}
或者如果你想启用赛车:
function foo(){
return Promise.all(
list.map( field => populateValues( field ))
).then(_=>list);
}
答案 1 :(得分:3)
由于对 populateValues()的每个函数调用都是异步的,函数 foo 不会等待返回列表对象。
你可以让 foo 等待 populateValues 的结果来获得你期望的回应。