enchaîner les promesses avec q.js
J'essaie de comprendre comment la promesse de chaînage des œuvres. Je suis en utilisant q.js. Voici ce que je suis en train de jouer avec.
var Q = require("q"); //npm install q
//the function Q(value) returns a fulfilled promise with the value... I think.
Q(1).then(Q(2)).then(Q(3)).then(Q(4)).then(function(n) {
console.log(n);
});
Q(1).then(function(n) {
return Q(2);
}).then(function(n) {
return Q(3);
}).then(function(n) {
return Q(4);
}).then(function(n) {
console.log("done: " + n);
});
Ma question se résume essentiellement en de pourquoi le premier journal 1
alors que le second, l'un des journaux de ce que je m'attends et, fondamentalement, les journaux de 1 à 4. J'avais espéré que la première est un journal 4
au lieu de 1
.
Je voulais juste être en mesure d'avoir des méthodes qui retournent des promesses, puis de la chaîne d'ensemble dans une chute d'eau comme la mode - je suppose que je pourrais utiliser asynchrone et d'une cascade, mais je voulais juste savoir si cela pourrait être réalisé w/promesses.
source d'informationauteur Anon
Vous devez vous connecter pour publier un commentaire.
C'est parce que
then
ne pas s'attendre à un autre de la promesse, comme un argument. Plutôt, il s'attend à ce des fonctions de gestionnaire deun rappel et/ou un errbackl'ancien, vous êtes de passage dans votre 2ème exemple. En effet, aucun argument qui est pas une fonction est tout simplement ignoré.À partir de la documentation:
Donc oui, le chaînage des promesses qui peut être fait. Vous êtes en train de faire dans votre 2ème exemple.
Il est possible que l'exemple artificiel ici de passer des promesses tenues fait le chemin de chaînage des promesses œuvres semblent trop verbeux, mais dans l'utilisation du monde réel, vous avez généralement de la chaîne de promesses, parce que vous êtes intéressé à leurs valeurs de retour, par exemple:
(En fait ce miroirs
async.waterfall
. Si vous voulais juste appeler une série de async fonctions dans l'ordre avec aucune quant à leurs résultats, vous pouvez utiliserasync.series
)Je sais que javascript n'est pas statique, mais vous avez besoin de réfléchir sur les types ici.
Q.then
besoins de la seconde.