Во время анализа кода я недавно сталкивался с такими блоками кода:
const promises = [];
const data = [];
for (let piece of pieces) {
for (let chunk of piece) {
promises.push(execute(chunk)); //execute returns a promise which is not yet fulfilled
}
data = await Promise.all(promises);
}
Здесь pieces
- это массив массивов.Обратите внимание, что из-за определенных ограничений мы не можем await
все Обещания одновременно , отсюда и этот вид чанкинга.мы также ожидаем обещания , которые были разрешены в предыдущих итерациях , и следующий способ является правильным способом обработки таких сценариев:
const data = [];
for (let piece of pieces) {
const promises = [];
for (let chunk of piece) {
promies.push(execute(chunk)); //execute returns a promise which is not yet fulfilled
}
data.push(... await Promise.all(promises));
}
В конце data
будет таким жев обоих случаях.
Я понимаю, как data
заполняется в обоих случаях.Я хотел бы знать, какова нагрузка на производительность в ожидании уже выполненного обещания (что происходит в первом блоке кода) и является ли это значительным?