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,firstetsecondsimultanément- Une fois l'exécution de
preterminée, exécutezthirdSi 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 fonctionpreet, une fois terminée, exécutera latroisièmefonction.
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 () ...