Soirée à tous,
Nouveau sur JavaScript et essayant d'exécuter ce même ordre, cela ne se produit clairement pas. Lorsque je cours en mode de débogage et lorsque je définirai le point de débogage sur GetMongOfield, le reste du code est exécuté, comment puis-je exécuter ce code dans le même ordre, récupérez d'abord certains champs de Mongo, puis de SendFirstMessage, puis de SendSecondMessage (tous les trois Les fonctions renvoient une promesse), peut introduire attendre à l'intérieur de la promesse? p>
merci p>
3 Réponses :
Vous ne créez pas votre propre promesse (c'est le promesse explicite construction antiparatère ); Au lieu de cela, la chaîne des promesses existantes ensemble et renvoie le résultat.
Voici une façon dont vous faites cela, voir *** code> Commentaires: p>
sentTest: (message) => {
let asResponse;
// *** Return the result of the chain
return getMongoField('terminals', {'attributes.XYZ': 'ABC'})
.then(docs => {
// *** Return the promise for the next operation
return ts.sendFirstMessage(docs.attributes.sno, docs, docs.attributes.value)
// *** Settle the promise from `then` with `docs` so the next handler can see it
.then(() => docs);
})
.then(docs => {
// *** Return the promise for the next operation
return ts.SendSecondMessage(docs.attributes.sno, 'Test', docs, message);
});
},
Merci. J'ai suivi votre première approche et je peux voir que le code s'exécute dans le même ordre qu'il est écrit. J'ai une autre question t.j, estime que j'ai deux fonctions asynchrones A et B, une fonction d'appel B quel interne appelle la fonction C avec un rappel. Maintenant, le problème est que, dès bientôt la fonction, un appels B, B renvoie une promesse résolue, mais il y a une action en attente dans la fonction C. Si vous pouviez m'aider à comprendre, ce serait génial et utile. Merci prashan je viens de Java World alors tout est grec et latin pour moi.
@Prashannanarayanasamy - J'ai bien peur de ne pas bien comprendre le scénario dont vous parlez. Si vous mélangez des promesses avec des API de rappel asynchrones de style ancien, votre meilleur pari est généralement de faire une enveloppe de promesse autour de l'API de style ancien. Ensuite, vous pouvez chaîner les promesses d'avoir des choses dans l'ordre de votre choix sans avoir à travailler dans deux mondes différents. :-)
Merci t t.j Vous êtes correct, j'appelle certaines fonctions qui sont écrites avec des rappels, je vais essayer de créer une enveloppe de promesse autour de l'ancien et voir si cela fonctionne. Encore merci.
@Prashannanarayanasamy - Les réponses de cette question devraient aider. :-) Codage heureux!
Vous n'avez pas besoin d'introduire attendre à l'intérieur de la promesse. Parce que la fonction ASYNC est une fonction qui retourne déjà une promesse de retour.
https://codesandbox.io/s/confidents-banzai-24khs?file=/src/index.js p>
Merci, maintenant j'ai une compréhension juste d'ASYNC et de promesses. Sous quel scénario écrivons-nous des promesses explicites.
Peut introduire attendre à l'intérieur de la promesse? p>
Vous pourriez, mais il ne sert à rien de le faire à l'intérieur em> une promesse (voir le lien dans la réponse de T.J. Crowder). Vous n'avez pas besoin d'une promesse explicite si vous traitez déjà d'un. P>
Voir ci-dessous pour écrire votre code avec
async code> /
attendre code>: p>
xxx pré> appelez-le comme
attendre quelque chose.sendtest (message) code>. p> blockquote>
Évitez les
Promise Code> Constructeur AntiPattern
!