Tôi có một mô-đun xuất trong Node.JS
exports.doSomethingImportant= function(req, res) {
var id = req.params.id;
Demo.findOne({'_id': id})
.exec(function(err, demosReturned) {
async.waterfall([
hàm(outerCallBack){
console.log("Trong lần gọi lại đầu tiên");
firstOrderFunction(demosReturned,outerCallBack);
},
hàm(x,outerCallBack){
var y =3
var z = x*y;
console.log("Trong cuộc gọi lại lần thứ hai");
bên ngoàiCallBack(null,z);
}
],hàm(err,z){
if(err){
console.log("Lỗi là == " +err);
}khác{
console.log("Giá trị trả về là == "+z);
}
});
});//Kết thúc Demo.findOne
};
bây giờ của tôi chức năng đặt hàng đầu tiên
Lại có một cái async.each
Nhúng async.waterfall
hàm nắm tayOrderFunction(demosReturned,outerCallBack){
console.log("Được gọi là hàm ngoài");
async.each(demosReturned.locations, function(location, InnerCallBack) {
console.log('Vị trí tính toán #');
async.waterfall([
hàm(internalCallBack){
console.log("Tính toán thác nước bên trong đầu tiên");
a = 14;
nội bộCallBack(null,a);
},
hàm(a,internalCallBack){
console.log("Tính toán thác nước thứ hai bên trong");
b =14;
c = a*b;
nội bộBack(null,c)
}
],hàm(err,c){
if(err){
console.log("Lỗi là == " +err);
}khác{
d = c;
console.log("Giá trị trả về là == "+c);
bên trongCallBack(null,d);
}
});//Kết thúc Async.Waterfall
},hàm(err,d){
if(err){nhập mã vào đây
console.log("Lỗi trong Async.Each === " + err);
}khác{
console.log("Giá trị trả về đã được xử lý");
bên ngoàiCallBack(null, d);
}
}); //Kết thúc không đồng bộ.Each
}
Đầu ra tôi nhận được là
Trong cuộc gọi lại đầu tiên
Gọi là hàm ngoài
Vị trí tính toán #
Vị trí tính toán #
Máy tính thác nước bên trong đầu tiên
Máy tính thác nước bên trong đầu tiên
Giá trị trả về được xử lý
Trong cuộc gọi lại thứ hai
Giá trị trả về là == NaN
Tôi muốn mọi thứ chạy đồng bộ theo thứ tự sau.
Gọi async.waterfall trong exec gọi lại Demo.findone
Gọi FirstOrderFunction
Gọi async.each bên trong firstOrderFunction
Gọi async.waterfall bên trong async.each
Gọi hàm gọi lại đầu tiên trả về a=14.
Gọi hàm gọi lại thứ hai trả về c =14*14 =196.
Làm cách nào tôi có thể đạt được điều này bằng cách sử dụng async?
Cảm ơn trước và xin lỗi vì một câu hỏi dài như vậy.
Lệnh gọi lại của async.each() được gọi ở cuối async.waterfall() và lệnh gọi lại của FirstOrderFunction được gọi ở cuối async.each(). Đây là mã được sửa đổi:
hàm nắm tayOrderFunction(demosReturned, gọi lại){
var ret = [];
console.log("Được gọi là hàm ngoài");
async.each(demosReturned.locations, function(location, eachCb) {
console.log('Vị trí tính toán #');
async.waterfall([
hàm (thác nướcCb) {
console.log("Tính toán thác nước bên trong đầu tiên");
a = 14;
thác nướcCb(null,a);
},
hàm(a,thác nướcCb){
console.log("Tính toán thác nước thứ hai bên trong");
b =14;
c = a*b;
thác nướcCb(null,c)
}
],hàm(err,c){
if(err){
console.log("Lỗi là == " +err);
mỗiCb(err);
}khác{
ret.push(c);
console.log("Giá trị trả về là == "+c);
mỗiCb(null);
}
});//Kết thúc Async.Waterfall
},hàm(err){
if(err){
console.log("Lỗi trong Async.Each === " + err);
gọi lại (err, null);
}khác{
console.log("Giá trị trả về đã được xử lý");
gọi lại(null, ret);
}
}); //Kết thúc không đồng bộ.Each
}
Tôi là một lập trình viên xuất sắc, rất giỏi!