0
votes

Une fonction attendre dans une fonction asynchra-t-elle doit-elle rendre une promesse? (nœud.js)

async function someAsyncFunc() {
    const user = await asyncGetUser();
    const categories = await asyncGetCategories();
    const mapping = await asyncMapUserWithCategory(user, categories);
};

1 commentaires

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


5 Réponses :


0
votes

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.

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.


0 commentaires

0
votes

Je suis assez sûr asyncgetuser () et asyncgetcategies () doit retourner des promesses.

Non, ils n'ont pas besoin de.

Le attendre fonction doit également retourner des promesses pour que cela fonctionne?

Non, C'est la même chose pour attendre .


0 commentaires

0
votes

Réponse:

non.


Pourquoi?

Vous pouvez retourner une valeur normale ou une promesse . Si c'est une valeur normale , elle est convertie en un Promise résolue 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 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:


Que dit MDN?

 Description de l'attente MDN

Exceptions:

La plupart du temps, comme indiqué, attendre n'est utile que lorsqu'il est utilisé avec un prometteur . Pour être équilibré, un exemple de situation où une valeur pourrait être utile à utiliser avec une fonction attendre est lorsque vous fournissez un appel d'API ou une référence aux données de test en fonction de l'environnement actuel.

Sinon, c'est une rareté pour des raisons déjà énoncées. J'espère que cela vous aidera!


0 commentaires

0
votes

Vous pouvez attendre une fonction non-async (non promesse de retour): xxx pré>


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);
};


0 commentaires

0
votes

Premièrement, respect du titre de votre question, toutes les fonctions marquées de async renvoie une promesse , même si vous ne retournez pas explicitement un.

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?

Oui (logiquement, travailler, ne pas). Si vous utilisez attendre , cela signifie que la fonction attendre retourne une promesse; Sinon, il n'y a pas de raison logique à utiliser attendre dans des fonctions synchrones.

Je suppose que lentement

Eh bien, il n'y a pas de différence majeure en utilisant promess.all que d'exécuter les promesses chaque fois. En fait, promess.all n'est pas exécutant la promesse parce que la tâche de la promesse est lancée lorsque vous l'instanciez.


0 commentaires