Вам необходимо использовать .map
вместо .forEach
для .map
каждого элемента в result1
до Promise
, который разрешается после назначения result3
для finalResult
.Затем используйте Promise.all
для этого массива, который будет разрешен после того, как все его Обещания будут разрешены, после чего finalResult
будет заполнено всем необходимым:
const getRemoteData = function(uri) {
// pretty sure you didn't mean to recursively call getRemoteData:
return someApiCall(uri);
}
const result1 = await getRemoteData('http://…');
const finalResult = {};
await Promise.all(result1.map(async (record) => {
const result2 = await getRemoteData(record.uri);
const result3 = await getRemoteData(result2.uri);
finalResult[result2.uri] = result3;
}));
console.log(finalResult);
(обратите внимание, что вместо async
функция, которая await
что-то и возвращает немедленно, вы можете вместо этого просто return
Promise
напрямую - кроме того, точечная нотация обычно предпочтительнее скобочной нотации, скобочная нотация - это когда вам нужно использоватьимя свойства переменной)