Je veux exécuter du code en attendant une autre réponse?
Exemple:
var obj = {}; await pre(obj); await first(obj); await second(obj); await third(obj); await function pre(obj) {self.something = "something";} await function first(obj){...something...} await function second(obj){...something...} await function third(obj){...Do something with obj...}
Ce que je n'arrive pas à comprendre, c'est comment exécuter pre ( ) et faire son objectif chronophage, tout en exécutant les premier () et deuxième () et troisième (), mais le troisième s'exécutera une fois le pré-terminé?
3 Réponses :
Vous pouvez utiliser Promise .all
pour exécuter toutes vos étapes intermédiaires en parallèle avant d'exécuter third
:
var obj = {}; await Promise.all([ pre(obj), first(obj), second(obj)]); await third(obj);
Si je comprends bien votre question, au moment où Promise.all
est terminé, obj
contiendra les mutations de l'exécution de pre
, first
, et second
.
Faites attention à la gestion des erreurs ainsi qu'à l'accès non déterministe à l'objet obj
.
Ce que je n'arrive pas à comprendre, c'est comment exécuter pre () et réaliser son objectif chronophage, tout en exécutant les premier () et deuxième () et troisième (), mais le troisième s'exécutera une fois le pré-terminé?
Sur la base de cette question, je crois comprendre que vous souhaitez:
- Exécutez
pre
,first
etsecond
simultanément- Une fois l'exécution de
pre
terminée, exécutezthird
Si tel est le cas, le code suivant le fera:
var obj = {test: "Test"}; async function pre(obj) {console.log(`${pre.name} :`, obj); return obj;} async function first(obj) {console.log(`${first.name} :`, obj)} async function second(obj) {console.log(`${second.name} :`, obj)} async function third(obj) {console.log(`${third.name} :`, obj)} Promise.all([first(obj), second(obj), pre(obj).then(third)]);La fonction
Promise.all ()
prend un tableau de fonctions qui renvoient une promesse et les exécute en parallèle. Remarquez lepre (obj) .then (third)
. Cela exécutera la fonctionpre
et, une fois terminée, exécutera latroisième
fonction.
var obj = {}; async function pre(obj) {self.something = "something";} async function first(obj){...something...} async function second(obj){...something...} async function third(obj){...Do something with obj...} // use array destructuring to get the responses after promises resolve const [ preResponse, firstResponse, secondResponse ] = await Promise.all([ pre(obj), first(obj), second(obj) ]); const thirdResponse = await third(obj);
c'est
fonction async pre () ...
pasattendre la fonction pre () ...