NodeJS attendre de la requête HTTP
Je veux écrire une application qui demande un jeton à partir d'une API. Tant que ce jeton n'est pas disponible, je ne veux pas continuer avec le reste de l'application. Donc, il doit être comme un synchrone de la requête HTTP.
Mon but est de créer une fonction qui fait la demande, puis renvoie le jeton comme:
var token=getToken(); //After this function has finished
makeRequest(token); //I want this function to be executed
Comment puis-je faire cela?
Vous devez vous connecter pour publier un commentaire.
Il ne veut pas être synchrone à tous. Embrasser la puissance de rappels:
Qui assure makeRequest n'est pas exécutée jusqu'à ce que après getToken est terminé.
await
nonobstant).Vous ne pouvez pas faire une fonction qui retourne une valeur qu'il n'a pas immédiatement. Vous ne pouvez retourner une promesse.
Puis dans une autre partie de code, vous pouvez soit attendre que la promesse soit accomplie en utilisant le gestionnaire, ou vous pouvez utiliser quelque chose comme:
à l'intérieur d'un fonction async attendre pour que cette valeur soit disponible, mais seulement si le
getToken()
fonction renvoie une promesse.Par exemple, à l'aide de la
request-promise
module il serait quelque chose comme:Et puis une autre fonction:
Ou, avec
async function
quelque chose comme ceci:Voir: https://www.npmjs.com/package/request-promise
Noter que
async function
etawait
est de définir dans ECMAScript 2017 Projet (ECMA-262), ce qui n'est pas encore définitifs au moment de la rédaction de cet article comme de Mars 2017 (ce sera en juin 2017).Mais il est déjà disponible en Nœud depuis la v7.6 (et il a été disponible depuis la v7.0 si vous avez utilisé le
--harmony
drapeau). Pour la compatibilité avec le Noeud versions, voir:Si vous voulez des fonctionnalités similaires pour les anciens Nœud versions avec une syntaxe légèrement différente, vous pouvez utiliser les modules comme co ou Promesse.coroutine de Bluebird.
Par javaScript promesse:
Vous pouvez utiliser la fonction de ES6 appelé générateur. Vous pouvez suivre cette l'article pour approfondir les concepts. Mais, fondamentalement, vous pouvez utiliser des générateurs et des promesses pour faire ce travail. Je suis en utilisant bluebird à promisify et de gérer le générateur.
Votre code doit être fine comme dans l'exemple ci-dessous.