Elz*_* Jr 4 javascript foreach async-await
我在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 );
}
}
}
Run Code Online (Sandbox Code Playgroud)
populateValues()正确地等待我的承诺,但是foo()不等待populateValues返回列表,因此它返回的列表不完整。
您可能也想在那里等待,这与forEach无关,但与for..of在一起:
async function foo(){
for(var field of list){
await populateValues( field );
}
return list
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您想启用竞速:
function foo(){
return Promise.all(
list.map( field => populateValues( field ))
).then(_=>list);
}
Run Code Online (Sandbox Code Playgroud)