variable una resultado objetos mostrar imprimir funcion elementos ejemplos array agregar javascript node.js deferred

resultado - mostrar una variable javascript en un input



¿Cómo encadenar la ejecución de una matriz de funciones cuando todas las funciones devuelven aplazado? (6)

He creado mi primer objeto diferido en Node.js usando un módulo diferido y funciona muy bien cuando paso el resultado a la siguiente función y desencadeno la resolución y el rechazo. ¿Cómo encadenar la ejecución de la matriz de funciones cuando cada función devuelve la promesa diferida? Tengo como parámetros de entrada una matriz de funciones y un parámetro de entrada para la primera función y cada función siguiente obtiene el parámetro de la anterior.

Funciona como f1(100).then(f2).then(f3) , pero cómo cuando tengo n número de funciones.


Basándonos en @torazaburo, también podemos agregar un ''camino infeliz''

funcs.reduce(function(prev, cur) { return prev.then(cur).catch(cur().reject); }, starting_promise);


ES6, permitiendo argumentos adicionales:

function chain(callbacks, initial, ...extraArgs) { return callbacks.reduce((prev, next) => { return prev.then((value) => next(value, ...extraArgs)); }, Promise.resolve(initial)); }


ES7 forma en 2017. http://plnkr.co/edit/UP0rhD?p=preview

async function runPromisesInSequence(promises) { for (let promise of promises) { console.log(await promise()); } }

Esto ejecutará las funciones dadas secuencialmente (una por una), no en paralelo. El parámetro promises es una colección de funciones (NO Promise s), que devuelven Promise .


La misma idea, pero puede encontrarla ligeramente más clásica o más compacta:

funcs.reduce((prev, cur) => prev.then(cur), starting_promise);

Si no tiene un Promise.resolve() específico que quiera usar, solo use Promise.resolve() .


Necesitas construir una cadena de promesas en un ciclo:

var promise = funcs[0](input); for (var i = 1; i < funcs.length; i++) promise = promise.then(funcs[i]);


Para posibles matrices de funcs vacías:

var promise = $.promise(function(done) { done(); }); funcs.forEach(function(func) { promise = promise.then(func); });