async function someAsyncFunc() { const user = await asyncGetUser(); const categories = await asyncGetCategories(); const mapping = await asyncMapUserWithCategory(user, categories); };
5 Réponses :
En attente de quelque chose qui n'est pas une promesse ne sera pas une erreur de syntaxe ou quoi que ce soit comme ça. Cependant, cela ne fera que rien de note. Vous n'avez pas dit quoi attendre, et donc cela reprendra immédiatement. p>
Ma recommandation: Si le code est synchrone, laissez l'attente pour le rendre plus évident que c'est synchrone. Si c'est asynchrone, alors retournez une promesse et attendez cette promesse. P>
Je suis assez sûr
asyncgetuser () code> et
asyncgetcategies () code> doit retourner des promesses. P> blockQuote>
Non, ils n'ont pas besoin de. p>
Le
attendre code> fonction doit également retourner des promesses pour que cela fonctionne? P> blockQuote>
Non, C'est la même chose pour
attendre code>
. P>
non. p>
Vous pouvez retourner une valeur normale forte> ou La plupart du temps, comme indiqué, Sinon, c'est une rareté pour des raisons déjà énoncées. J'espère que cela vous aidera! P> Promise résolue code> avant d'être attribué à la variable. Je suppose que l'intention de ceci dans la spécification était que cela serait utile pour la flexibilité de la structure de contrôle, mais la vérité est si vous n'êtes pas
En attente de code> une promesse pivotante, vous trouverez que presque tous les Il est également possible d'utiliser une variable normale et vous ne faites que tourner des engrenages: P>
Que dit MDN? h2>
MDN P>
Exceptions: H2>
attendre code> n'est utile que lorsqu'il est utilisé avec un
prometteur code>. Pour être équilibré, un exemple de situation où une valeur pourrait être utile à utiliser avec une fonction
attendre code> est lorsque vous fournissez un appel d'API ou une référence aux données de test en fonction de l'environnement actuel. P >
Vous pouvez attendre une fonction non-async (non promesse de retour): yep, votre deuxième fonction fonctionne plus lentement: p>
async function someAsyncFunc() {
const userPromise = asyncGetUser();
const categoriesPromise = asyncGetCategories();
const user = await userPromise;
const categories = await categoriesPromise;
const mapping = await asyncMapUserWithCategory(user, categories);
};
Premièrement, respect du titre de votre question, Au cas où j'avais fait la même chose sans promesse.Tous (ci-dessous, je suppose que la fonction attendre doit également revenir des promesses pour que cela fonctionne? P>
blockQuote>
Oui (logiquement, travailler, ne pas). Si vous utilisez Je suppose que lentement p>
blockQuote>
Eh bien, il n'y a pas de différence majeure en utilisant async code> renvoie une promesse forte>, même si vous ne retournez pas explicitement fort > un. p>
attendre code>, cela signifie que la fonction attendre em> retourne une promesse; Sinon, il n'y a pas de raison logique à utiliser attendre dans des fonctions synchrones. P>
promess.all code> que d'exécuter les promesses chaque fois. En fait,
promess.all code> n'est pas exécutant strong> la promesse parce que la tâche
La fonction ASYNC est automatiquement enveloppée dans les promesses s'ils ne retournent pas une promesse Essayez ce qui suit:
attendre (fonction async () {retour 1}) (); (fonction async () {return 1}) (). ensuite (x => console.log (x)) code>;