2
votes

Comment attendre un résultat spécifique dans une fonction lors de l'exécution d'autres fonctions

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é?


1 commentaires

c'est fonction async pre () ... pas attendre la fonction pre () ...


3 Réponses :


4
votes

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 .


0 commentaires

0
votes

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:

  1. Exécutez pre , first et second simultanément
  2. Une fois l'exécution de pre terminée, exécutez third

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 le pre (obj) .then (third) . Cela exécutera la fonction pre et, une fois terminée, exécutera la troisième fonction.


0 commentaires

0
votes
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);

0 commentaires