gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 12:08:11 26 4
gpt4 key购买 nike

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

这是一个示例函数:

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);

最佳答案

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

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

next 的第一个参数必须为 null,因为 async.waterfall 将其视为错误(如果您在其中一个方法中遇到错误,请将其传递到那里,async.waterfall 将停止执行并完成将错误传递给 final方法)。

然后您可以像已经一样将其转换为(对象到数组),然后像这样调用它:

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
});

关于javascript - Node.js 异步模块 waterfall - 动态加载和执行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25090299/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com