使用Map生成异步瀑布的函数

时间:2019-07-20 08:46:46

标签: javascript asynchronous

我试图通过迭代“ titles”数组并将功能数组稍后传递给异步瀑布来产生异步功能。

根据文档:

  var asyncFunction = [
    function(callback){
        asyncFunc(1, function(){
            callback(null);
        });
    },

    // page 2
    function(data, callback){
        asyncFunc(2, function(){
            callback(null, data);
        });
    }
  ]

第一个函数将callback作为第一个参数,而第二个及所有后续函数将data作为第一个参数,并将callback作为第二个参数。

我的问题是如何根据地图迭代的索引有条件地创建函数?

下面是不工作的代码示例,以让您了解我要完成的工作。

谢谢

const asyncFuncs = ['a','b','c'].map( (letter, index) => {

  const args = i == 0 ? [callback] : [data, callback]
  return  function(args...){
        asyncFunc(2, function(){
            callback(null, data);
        });
    }
})

async.waterfall(asyncFuncs, (error, result) => {})

1 个答案:

答案 0 :(得分:0)

对不起,如果我错了。 我想您想基于数据动态瀑布功能。

var yourData = ['a','b','c'];
async.map(yourData, yourAssignFunction, function (err, result) {
    if(!err) {
       console.log('Success: ' + result);
    } else {
       console.log('Error: ' + err);
    }});

function yourAssignFunction(item, callback) {
    if (item === 'a') { // your conditions check here
        // use waterfall 1
        callback(waterfallFunction1);
    } else {
        // use waterfall 2
        callback(waterfallFunction2);
    }
}

function waterfallFunction1(item, callback) {
    async.waterfall([
        function(cb){
            console.log(' -> task1: ', item);
            cb(null, item);
        },
        function(response,cb){
            console.log(' -> task2: ', item);
            cb(null, item);
        }], callback)
}