0
votes

Appeler ASYNC Fonctionne à partir de boucles synchrones et de conserver les résultats commandés

async function processArray(array) {
  let myOrderedArray = [];

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

  return myOrderedArray;
}
I want to go through the array, for each item perform an async operation, and then save the value I get back in a different array. This results array is ordered: I want the result value for item1 appear in the result at position 1, before item2, and so on.However, these are async calls. I cannot be sure that my async function calls return in the exact same order, since they're, well, not synchronous. How can I achieve something like this?

2 commentaires

3 Réponses :


0
votes
async function processArray(array) {

  return array.map(async item => {
    return await getValue(item);
  })
}
promise in promises is ordered

0 commentaires

1
votes

Votre code est déjà garantit qu'ils seront en ordre, mais cela le fait de manière lente. Votre code sera exécuté jusqu'à ce que le premier attendra et puis bloquer jusqu'à ce qu'il ait la valeur. Une fois la première valeur, une fois que la première valeur sera bouclée, puis bloquer à nouveau pour la deuxième valeur.

Si vous voulez les faire tous en parallèle, vous voudrez alors créer une gamme de promesses et utiliser une promesse. Attendre que tous se terminent. P>

function processArray(array) {
  const promises = array.map(item => getValue(item));
  return Promise.all(promises);
}


0 commentaires

2
votes

Puisque vous attendez la fonction getvalue , la séquence sera maintenue bien que c'est une appel asynchrone. La fonction push ne sera pas appelée jusqu'au moment où le premier appel est réussi. pour ... de boucle respecte le code prometteur d'asynchrouns.


0 commentaires