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")
4 Réponses :
Vous pouvez écrire le code ci-dessus comme ceci: ici A code> retourne une promesse et après que
B code> retourne également une promesse qui est immédiatement résolu. p> p>
Pourquoi retourne promesse.Resolve (valeurs); code> pas
Valeurs de retour code>?
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 code>?
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.
Vous pouvez le faire de manière plus d'une manière.
formulaire 1 fort> p> premier, car au lieu de p> Utilisez p> < Pré> xxx pré> L'autre moyen est de rendre la fonction dans cette deuxième forme, différente de la première forme, vous pouvez toujours gérer la promesse après son retour : p> conclusion strong> p> Les deux formulaires répondent à votre demande de changer em> votre morceau de code, Et ce sera presque équivalent à votre code. Mais remarquez que si vous utilisiez la fonction CODE> CATTER CODE>, vous devez utiliser un try-catch à la place, autour du A code> ne revient pas, comme indiqué Par @ Chris-P-Bacon, au lieu de gérer la promesse elle-même, vous pouvez le retourner. p>
A code> une fonction
async code>, puis attends pour la promesse.Tous, de cette façon: p>
attendre code>. P> p>
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")
})
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 " 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();
Étant donné que
A code> ne renvoie rien, il n'y a rien à attendre - et vous devrez également attendre
B code>
En plus de ce que @chrispbacon a dit, je peux vous dire que même si la fonction
a code> a fait une promesse, la fonction
b code> l'attendrait oui, cependant le < code> console.log ("ici") code> n'attendrait pas la fonction
B code> pour terminer, vous devez faire quelque chose comme
B (). ensuite ((((((((((). .log ("ici")) code>