0
votes

Javascript promesse.all ()

J'ai ce morceau de code.

function a() {
  var promise1 = Promise.resolve(3);
  var promise2 = 42;
  var promise3 = new Promise(function(resolve, reject) {
    setTimeout(resolve, 2000, 'foo');
  });

  Promise.all([promise1, promise2, promise3]).then(function(values) {
    console.log("done", values);
  });
}

async function b() {
 await a(); 
}

b();
console.log("here")


2 commentaires

Étant donné que A ne renvoie rien, il n'y a rien à attendre - et vous devrez également attendre B


En plus de ce que @chrispbacon a dit, je peux vous dire que même si la fonction a a fait une promesse, la fonction b l'attendrait oui, cependant le < code> console.log ("ici") n'attendrait pas la fonction B pour terminer, vous devez faire quelque chose comme B (). ensuite ((((((((((). .log ("ici"))


4 Réponses :


1
votes

Vous pouvez écrire le code ci-dessus comme ceci: xxx

ici A retourne une promesse et après que B retourne également une promesse qui est immédiatement résolu.


4 commentaires

Pourquoi retourne promesse.Resolve (valeurs); pas Valeurs de retour ?


ASYNC Fonctions renvoie un objet asynccfonction .... Développeur. mozilla.org/en-us/docs/web/javascript/reference/... Donc, lorsque vous y retournerez des valeurs, il retournera un objet avec «En attente» (essentiellement une promesse). Par conséquent, nous devons obtenir les valeurs en utilisant ensuite.


Quand ai-je posé des questions sur .Chen ?


Les fonctions ASYNC renvoient une promesse et si la promesse n'est pas retournée, elle est automatiquement enveloppée dans une promesse. Donc, oui, nous pouvons simplement écrire des valeurs de retour au lieu de retourner une promesse. Je vais éditer la réponse.



1
votes

Vous pouvez le faire de manière plus d'une manière.

formulaire 1

premier, car A ne revient pas, comme indiqué Par @ Chris-P-Bacon, au lieu de gérer la promesse elle-même, vous pouvez le retourner.

au lieu de xxx

Utilisez < Pré> xxx

formulaire 2

L'autre moyen est de rendre la fonction A une fonction async , puis attends pour la promesse.Tous, de cette façon: xxx

dans cette deuxième forme, différente de la première forme, vous pouvez toujours gérer la promesse après son retour : xxx

conclusion

Les deux formulaires répondent à votre demande de changer votre morceau de code, Et ce sera presque équivalent à votre code. Mais remarquez que si vous utilisiez la fonction CATTER , vous devez utiliser un try-catch à la place, autour du attendre .


0 commentaires

1
votes

B code> est la fonction ASYNC. Donc, vous pouvez mettre en attente avant tout en l'appelant, puis exécutez le repos ou faites-le comme

b().then(res => {
 //rest codes  
 console.log("here")
})


0 commentaires

1
votes

Votre promesse fonctionne toujours de manière asynchrone afin que vous fassiez attendre jusqu'à ce qu'il soit résolu, puis vous pouvez imprimer votre console " ici forte>".

p>

function a() {
  var promise1 = Promise.resolve(3);
  var promise2 = 42;
  var promise3 = new Promise(function(resolve, reject) {
    setTimeout(resolve, 2000, 'foo');
  });

  return Promise.all([promise1, promise2, promise3]).then(function(values) {
   return values;
  });
}

 function b() {
 a().then( function(res) {
  console.log("done", res);
  console.log("here")
 })
}

b();


0 commentaires