gpt4 book ai didi

javascript - 在回调函数中使用局部变量

转载 作者:行者123 更新时间:2023-12-03 12:31:17 25 4
gpt4 key购买 nike

我的目标是按顺序执行一些 JavaScript 函数,其中一个函数的结果经常(但并非总是)用作另一个函数的参数。

var async = require('async');

var commonFunction1 = function(arg1, arg2, callback) { // callback(err, res1, res2)
callback(null, arg1 + arg2, 11);
}

var commonFunction2 = function(arg3, arg4, callback) { // callbackb(err, res3, res4)
callback(null, arg3 + arg4, 90);
}

var argument1 = 1,
argument2 = 2,
result1,
result2,
result3,
result4;

async.series({
1: function(cb) {
commonFunction1(argument1, argument2, function(err, res1, res2) {
result1 = res1;
result2 = res2;
cb(err);
});
},
2: function(cb) {
commonFunction2(result1, result2, function(err, res3, res4) {
result3 = res3;
result4 = res4;
cb(err);
});
},
}, function(err, results) {
console.log(err, result1, result2, result3, result4);
});

如您所见,像 result1 = res1 这样的语句是强制语法糖。

是否有更好的方法来链接局部变量和回调函数参数?

附注闭包不是我的方式,因为我计划将 commonFunction1commonFunction2 移动到另一个模块。

最佳答案

按预期使用系列,仅将一个结果传递给下一个回调:

async.series([function(next) {
commonFunction1(argument1, argument2, function(err, res1, res2) {
next(err,{result1:res1,result2:res2});
});
,
function(next) {
commonFunction2(result1, result2, function(err, res3, res4) {
next(err,{result3:res3,result4:res4});
});
}],function(err,results){
var finalObject= results.reduce(function(res,next){
Object.keys(next).forEach(function(k){
res[k]=next[k];
});
return res;
},{});
console.log(finalObject);
});

我建议您更好地构建 commFunctions 并返回一个带有属性的对象,而不是传递 2 个结果和错误。

var commonFunction1 = function(arg1, arg2, callback) { // callback(err, res1, res2)
callback(err, {prop1:arg1 + arg2, prop2:11} );
}

这是nodejs中的最佳实践,只需查看异步核心函数,将使您的代码更易于使用。这样您就不必在最终的async.series回调中编写所有reduce代码,只需使用数组结果。

编辑:正如我的评论中所述,async.waterfall更适合您的用例。

关于javascript - 在回调函数中使用局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23908358/

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