Node.js 了解Asycn
我有一个通过数组调用async.each的函数。在asycn.each内部有一个函数,该函数通过在第一个函数中传递的数据调用async.eachNode.js 了解Asycn,node.js,asynchronous,Node.js,Asynchronous,我有一个通过数组调用async.each的函数。在asycn.each内部有一个函数,该函数通过在第一个函数中传递的数据调用async.each var f1 = function(){ var b = [o1,o2,o3,o4,o5,o6....]; async.forEach(b, function(obj, cb){ f2(obj, function(){ cb(); })
var f1 = function(){
var b = [o1,o2,o3,o4,o5,o6....];
async.forEach(b, function(obj, cb){
f2(obj, function(){
cb();
})
}, function(err){
})
};
var f2 = function(obj, c2){
async.forEach(obj, function(obj2,cb){
// some db operation
return dbData;
cb();
}, function(){
// do asynch operation on dbData and update value in db
})
};
现在,我的疑问是,当f2为f1中传递的第一项执行async.forEach时,将调用回调函数,回调函数将对f2中传递的obj执行一些操作。但由于这是并行执行的,当调用第一项的回调时,它是否会有相同的obj对象继续操作,或者obj的值可能与其他asych不同。每个任务都是通过相同的函数调用的。首先执行函数f1,然后执行完成的函数f2
var f1 = function(){
var b = [o1,o2,o3,o4,o5,o6....];
async.forEach(b, function(obj, cb){
f2(obj, function(){
cb();
})
}, function(err){
})
};
var f2 = function(obj, c2){
async.forEach(obj, function(obj2,cb){
// some db operation
return dbData;
cb();
}, function(){
// do asynch operation on dbData and update value in db
})
};
var f1 = function(){
var b = [o1,o2,o3,o4,o5,o6....];
async.forEach(b, function(obj, cb){
f2(obj, function(){
cb();
})
}, function(err){
})
};
async.eachSeries(f1, f2, function (err) {
if (err) {
res.json({status: 0, msg: "OOPS! How is this possible?"});
}
res.json("Series Processing Done");
})
var f2 = function(obj, c2){
async.forEach(obj, function(obj2,cb){
// some db operation
return dbData;
cb();
}, function(){
// do asynch operation on dbData and update value in db
})
这不是我的用例。F1必须为每个数组处理调用F2。处理完所有F2后,返回F1回调。我只想知道f2中的回调函数是会得到在f1中传递的obj还是其他obj,因为它是并行处理的。根据我的理解,您将执行函数f1,然后执行函数f2。这些手术一个接一个地进行。先是f1,然后是f2。否。这是与数组相关的db操作。我有10个不同的obj需要更新,它们都是同时发生的。所以f1得到第一个obj,然后在f2中执行操作,类似于其他操作。它不是一个接一个的.async.series([function f1(){…这里执行的第一个函数,然后是cb from here},function f2(){…这里执行的第二个函数。}]);希望这有帮助。在f2的forEach中,
cb()
从未被调用,因为返回dbData代码>