Node.js异步模块瀑布-动态加载和执行函数



我正在尝试动态加载一系列匿名函数并执行它们,将前一个函数的结果传递给下一个。

下面是一个函数示例:

module.exports = function (data) {
    // do something with data
    return (data);
}

当函数被加载时(它们都位于单独的文件中),它们作为对象返回:

{ bar: [Function], foo: [Function] }

我想使用async.waterfall执行这些函数。它接受一个函数数组,而不是函数对象,因此我进行如下转换:

var arr =[];
        for( var i in self.plugins ) {
            if (self.plugins.hasOwnProperty(i)){
                arr.push(self.plugins[i]);
            }
        }

这给:

[ [Function], [Function] ]

我现在如何使用每个异步执行每个函数。瀑布传递前一个函数的结果到下一个?


<

解决方案/strong>

感谢@piergiaj的评论,我现在在函数中使用next()。最后一步是确保在数组中首先放置一个预定义的函数,该函数可以传递传入的数据:

var arr =[];
    arr.push(function (next) {
        next(null, incomingData);
    });
    for( var i in self.plugins ) {
        if (self.plugins.hasOwnProperty(i)){
            arr.push(self.plugins[i]);
        }
    }
    async.waterfall(arr,done);

如果您希望它们使用async将数据传递给下一个。瀑布式,不是在每个函数结束时返回,而是需要调用next()方法。此外,您需要将next作为每个函数的最后一个参数。例子:

module.exports function(data, next){
    next(null, data);
}

next的第一个参数必须为空,因为async。Waterfall将其视为错误(如果你在其中一个方法中遇到错误,将其传递给异步方法)。Waterfall将停止执行并完成将错误传递给最终方法)。

你可以把它转换成(对象到数组),然后像这样调用它:

async.waterfall(arrayOfFunctions, function (err, result) {
     // err is the error pass from the methods (null if no error)
     // result is the final value passed from the last method run    
  });

相关内容

  • 没有找到相关文章

最新更新