0
votes

Écrire plusieurs fonctions de carte en promesse.Tous ()

J'ai deux blocs de travail de promesse.Tous () dans une seule méthode. Je veux combiner ces deux promesses.Tous () en un. La promesse individuelle.All () comprend une fonction de carte qui effectue une tâche asynchrone. Exemple:

let obj1 = [], obj2 = [];
await Promise.all(container1.map(async (item)=>{
   obj1.push(await dbCall(item));
}))

await Promise.all(container2.map(async (item)=>{
   obj2.push(await dbCall(item));
}))


0 commentaires

3 Réponses :


2
votes

Gardez à l'esprit que array.map code> retourne un nouveau tableau em>, dans ce cas, une gamme de promesses depuis Async / Attendre les fonctions de retour toujours des promesses. Donc, votre exemple de transmission [map1, map2] code> sera une matrice bidimensionnelle; Ce sera une gamme de matrices de promesses. Quelque chose comme ceci: xxx pré>

la promesse.Tous la fonction s'attend à une gamme de promesses et non à une gamme de matrices de promesses, d'où il échoue. Il vous suffit de passer la structure correcte de la matrice, que vous pouvez faire avec array.concat code> (pour la syntaxe ES5) ou de l'opérateur répandu (pour la syntaxe ES6). P>

Promise.all(map1.concat(map2));
// OR
Promise.all([...map1, ...map2]);


1 commentaires

Complètement manqué la matrice bidimensionnelle de plusieurs cartes. La fusion au-dessus des fonctions de la carte aidées à attendre pour toutes les promesses à compléter. Merci! @Icemetalpunk!



3
votes

Vous essayez d'abord de fusionner les deux tableaux, puis

let obj = [];
container1.foreach((item)=>{
    obj.push(dbCall(item));
})
container2.foreach((item)=>{
    obj.push(dbCall(item));
})

await Promise.all(obj)


1 commentaires

Hey Isuru, merci d'avoir pris votre temps. Ici, les dBCalls sont asynchrones. Par conséquent, j'aurai besoin d'ajouter dans l'attente à chaque dBCall que je fais. Malheureusement, nous ne pouvons pas avoir de fonctions asynchrones comme rappels pour «foreach». Donc, la pièce de code ci-dessus ne récupérera pas la valeur donnée par le DBCall. Mais la fusion des cartes a du sens. Merci isuru :)



0
votes

Tout d'abord simplifier votre code à partir de ce tableau poussant ing vers xxx

puis, pour les exécuter simultanément, ajoutez une autre promess.All autour d'eux: xxx


0 commentaires