异步函数不在forEach循环内等待

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返回列表,因此它返回的列表不完整。

Jon*_*lms 6

您可能也想在那里等待,这与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)