Если вы выполните:
const [a, b, c] = await Promise.all([function1(), function2(), function3()];
, сначала будет выполняться синхронная часть function1
, затем синхронная часть function2
, а затем синхронная часть function3
. В этот момент они участвуют в гонке за завершение. Независимо от порядка, в котором они заполняются, вы получите результаты по порядку (a
- результат function1
, b
из function2
, и c.).
Если сервер требует, чтобы асинхронная часть function1
fini sh перед запуском function2
, тогда вы должны использовать свой исходный код. Единственный элемент управления, который у вас есть в коде на стороне клиента, - это когда процессы запускаются .
Однако , это не означает, что их нельзя немного оптимизировать. , но это во многом зависит от того, что они делают. Например, если важно то, что вы получаете заголовки , отправленные в ответ на запрос function1
, перед запуском function2
, но function1
выполняет дальнейшую обработку после получения заголовков (например, читая и делая что-то с телом ответа), вы можете оптимизировать это, но разделив function1
на две части: часть, которая запускает процесс и использует заголовки, и часть, которая потребляет тело и что-то делает с ним.
Если бы вы сделали это, вы бы сделали это так:
// Do the first part in series
const r1 = await function1PartA();
const r2 = await function2PartA();
const r3 = await function3PartA();
// Do the remainder in parallel
const [a, b, c] = await Promise.all([
function1PartB(r1),
function2PartB(r2),
function3PartB(r3)
]);