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?
3 Réponses :
async function processArray(array) { return array.map(async item => { return await getValue(item); }) } promise in promises is ordered
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); }
Puisque vous attendez la fonction code> getvalue code>, 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 code> boucle respecte le code prometteur d'asynchrouns. p>
Est-ce que cela répond à votre question? Processus asynchrones à l'intérieur d'un JavaScript pour la boucle
Cela pourrait être utile, je suppose développeur.mozilla.org/en-us/docs/web/javascript/reference/...