Вызов asyn c функций из синхронных циклов и упорядочение результатов - PullRequest
0 голосов
/ 16 марта 2020
async function processArray(array) {
  let myOrderedArray = [];

  for (const item of array) {
    const value = await getValue(item);
    myOrderedArray.push(value);
  }

  return myOrderedArray;
}

Я хочу go через массив, для каждого элемента выполнить асинхронную операцию c, а затем сохранить полученное значение в другом массиве. Этот массив результатов упорядочен : я хочу, чтобы значение результата для item1 появилось в результате в позиции 1, перед item2 и т. Д.

Однако это асин c звонки. Я не могу быть уверен, что мои вызовы функций asyn c возвращаются в том же порядке, поскольку они, ну, в общем, не синхронны. Как мне достичь чего-то подобного?

Ответы [ 3 ]

2 голосов
/ 16 марта 2020

Поскольку вы ожидаете функцию getValue, последовательность будет сохраняться, хотя это и асинхронный вызов. Функция pu sh не будет вызываться до тех пор, пока первый вызов не будет успешным. for...of l oop соблюдает код обещания асинхронных.

1 голос
/ 16 марта 2020

Ваш код уже гарантирует, что они будут в порядке, но он делает это медленно. Ваш код будет работать до первого ожидания, а затем будет блокироваться, пока не получит значение. Только если у него есть первое значение, оно будет l oop, а затем снова заблокировано для второго значения.

Если вы хотите сделать их все параллельно, то вам нужно будет создать массив обещаний. и используйте Promise.all, чтобы подождать, пока все они закончатся 1007 *

0 голосов
/ 16 марта 2020
async function processArray(array) {

  return array.map(async item => {
    return await getValue(item);
  })
}

обещание в обещаниях заказано

...