gpt4 book ai didi

javascript - 如何在 async.each 内具有 async.waterfall 的外部函数中调用 async.each

转载 作者:太空宇宙 更新时间:2023-11-04 00:56:53 27 4
gpt4 key购买 nike

我在 Node.JS 中有一个导出模块

exports.doSomethingImportant= function(req, res) {
var id = req.params.id;
Demo.findOne({'_id': id})
.exec(function(err, demosReturned) {
async.waterfall([
function(outerCallBack){
console.log("In the First Call Back");
firstOrderFunction(demosReturned,outerCallBack);
},
function(x,outerCallBack){
var y =3
var z = x*y;
console.log("In the Second Call Back");
outerCallBack(null,z);
}
],function(err,z){
if(err){
console.log("Error is == " +err);
}else{
console.log("The Returned Value is == "+z);
}
});
});//End Demo.findOne
};

现在,我的 firstOrderfunction 再次有一个 async.each 嵌入 async.waterfall

function fistOrderFunction(demosReturned,outerCallBack){
console.log("Called the External Function");


async.each(demosReturned.locations, function(location, innerCallBack) {
console.log('Computing Location #');

async.waterfall([
function(internalCallBack){
console.log("Computing Inner First Waterfall");
a = 14;
innternalCallBack(null,a);
},
function(a,internalCallBack){
console.log("Computing Inner Second Waterfall");
b =14;
c = a*b;
innternalBack(null,c)
}
],function(err,c){
if(err){
console.log("Error is == " +err);
}else{
d = c;
console.log("The Returned Value is == "+c);
innerCallBack(null,d);
}
});//End Async.Waterfall
},function(err,d){
if(err){enter code here
console.log("The Error in Async.Each === " + err);
}else{
console.log("The Returned Value is Processed ");
outerCallBack(null, d);
}
}); //End Async.Each
}

我得到的输出是

<小时/>

In the First Call Back

Called the External Function

Computing Location #

Computing Location #

Computing Inner First Waterfall

Computing Inner First Waterfall

The Returned Value is Processed

In the Second Call Back

The Returned Value is == NaN

我希望所有内容都按以下顺序同步运行。

  1. Call async.waterfall in exec call back of Demo.findone

  2. Call the firstOrderFunction

  3. Call async.each inside firstOrderFunction

  4. Call async.waterfall inside async.each

  5. Call the first callback function returning a=14.

  6. Call the second callback function returning c =14*14 =196.

如何使用异步实现此目的?

提前致谢,并对这么长的问题表示歉意。

最佳答案

在 async.waterfall() 的末尾调用 async.each() 的回调,并在 async.each() 的末尾调用 firstOrderFunction 的回调。这是修改后的代码:

function fistOrderFunction(demosReturned, callback){
var ret = [];

console.log("Called the External Function");
async.each(demosReturned.locations, function(location, eachCb) {
console.log('Computing Location #');

async.waterfall([
function(waterfallCb){
console.log("Computing Inner First Waterfall");
a = 14;
waterfallCb(null,a);
},
function(a,waterfallCb){
console.log("Computing Inner Second Waterfall");
b =14;
c = a*b;
waterfallCb(null,c)
}
],function(err,c){
if(err){
console.log("Error is == " +err);
eachCb(err);
}else{
ret.push(c);
console.log("The Returned Value is == "+c);
eachCb(null);
}
});//End Async.Waterfall
},function(err){
if(err){
console.log("The Error in Async.Each === " + err);
callback(err, null);
}else{
console.log("The Returned Value is Processed ");
callback(null, ret);
}
}); //End Async.Each
}

关于javascript - 如何在 async.each 内具有 async.waterfall 的外部函数中调用 async.each,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29382803/

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