J'ai créé mon premier objet différé dans Node.js en utilisant le module différé et cela fonctionne très bien lorsque je passe le résultat à la fonction suivante et déclenche la résolution et le rejet.Comment enchaîner l'exécution d'un tableau de fonctions lorsque chaque fonction renvoie deferred.promise? J'ai comme un tableau de paramètres d'entrée de fonctions et un paramètre d'entrée pour la première fonction et chaque fonction suivante obtient le paramètre du précédent.
Cela fonctionne comme f1(100).then(f2).then(f3)
, mais comment quand j'ai n nombre de fonctions.
Vous devez créer une chaîne de promesses en boucle:
var promise = funcs[0](input);
for (var i = 1; i < funcs.length; i++)
promise = promise.then(funcs[i]);
Même idée, mais vous pouvez le trouver légèrement plus classe ou plus compact:
funcs.reduce((prev, cur) => prev.then(cur), starting_promise);
Si vous n'avez pas de starting_promise
Spécifique que vous souhaitez utiliser, utilisez simplement Promise.resolve()
.
En nous appuyant sur @torazaburo, nous pouvons également ajouter un "chemin malheureux"
funcs.reduce(function(prev, cur) {
return prev.then(cur).catch(cur().reject);
}, starting_promise);
ES6, permettant des arguments supplémentaires:
function chain(callbacks, initial, ...extraArgs) {
return callbacks.reduce((prev, next) => {
return prev.then((value) => next(value, ...extraArgs));
}, Promise.resolve(initial));
}
Manière ES7 en 2017. http://plnkr.co/edit/UP0rhD?p=preview
async function runPromisesInSequence(promises) {
for (let promise of promises) {
console.log(await promise());
}
}
Cela exécutera les fonctions données séquentiellement (une par une), pas en parallèle. Le paramètre promises
est une collection de fonctions (PAS Promise
s), qui renvoient Promise
.
Pour un tableau funcs
vide possible:
var promise = $.promise(function(done) { done(); });
funcs.forEach(function(func) {
promise = promise.then(func);
});