Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

214
Vistas
Usar cascada asíncrona para pasar argumentos

Considere un caso en el que el valor de devolución de llamada de la primera función en cascada debe usarse varias veces en funciones posteriores para finalmente fusionar los resultados. En el siguiente código, baseFn debe devolver una matriz en la devolución de llamada, que luego debe procesarse elemento por elemento como se indica en subFn1 y subFn2. A partir de entonces, las devoluciones de llamada de subFn1 y subFn2 deben agregarse a una nueva matriz para producir el resultado final. He intentado ver si hay una manera de lograr esto usando async.series y async.apply, pero no he podido avanzar mucho más. Por favor avise.

 async.waterfall ([ function baseFn(baseCb) { //a method that gets an array of elements return (null, elementArray); }, function subFn1(elemArr, subFnCb) { var elem = elemArr[0]; //a method that returns processed element return (null, proc_elem1); }, function subFn2(elemArr,subFnCb) { var elem = elemArr[1]; //a method that returns processed element return (null, proc_elem2); }, function aggOut() {} ], function getOutput (err, out) { console.log(out); })
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Dado que subFn1() y subFn2() dependen de baseFn, es mejor usar async.auto() porque podemos especificar la dependencia de subFn1 y subFn2 es baseFn(). Aquí está el código:

 var async = require('async'); async.auto({ baseFn: function(autoCb) { var elementArray = ['one', 'two']; autoCb(null, elementArray); }, subFn1: ['baseFn', function(results, autoCb) { var elem = results.baseFn[0]; console.log('subFn1', elem); var proc_elem1 = 'proc_elem1'; autoCb(null, proc_elem1); }], subFn2: ['baseFn', function(results, autoCb) { var elem = results.baseFn[1]; console.log('subFn2', elem); var proc_elem2 = 'proc_elem2'; autoCb(null, proc_elem2); }] }, function(err, results) { console.log('results', results); });

El resultado se verá así (tenga en cuenta que el orden de finalización de subFn1 y subFn2 no está garantizado ya que se ejecutan en paralelo. Sin embargo, el objeto final de 'resultados' en la devolución de llamada final tendrá todos los resultados):

 subFn1 one subFn2 two results { baseFn: [ 'one', 'two' ], subFn1: 'proc_elem1', subFn2: 'proc_elem2' }
over 4 years ago · Santiago Trujillo Denunciar

0

const baseFn = function(baseCb) { // ... return baseCb(elementArray); } baseFn(function(elemArr) { // since subFn1 and subFn2 both need elemArr independently, // lets use async.parallel here. async.parallel([ function subFn1(elemArr, subFnCb) { // ... return subFnCb(null, proc_elem1); }), function subFn2(elemArr, subFnCb) { // ... return subFnCb(null, proc_elem2); }), ], function(err, result) { // async.parallel callback with proc_elem1 and 2 in result. // you can now create your final result with elementArray // and both proc_elem. console.log([elemArr, result[0], result[1]]); }); });
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda