我正在尝试动态加载一系列匿名函数并执行它们,将前一个的结果传递给下一个。
这是一个示例函数:
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] ]
我现在如何使用每个 async.waterfall 将前一个函数的结果传递给下一个函数来执行每个函数?
解决方案
感谢@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);