如何在async.parallel方法内使异步代码同步-NodeJs [英] How to make async code into sync inside the async.parallel method - NodeJs
本文介绍了如何在async.parallel方法内使异步代码同步-NodeJs的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的后端代码如下:
exports.getDashboard = (req, res) => {
const dashboard = {};
const query = {};
let start;
let end;
async.parallel([
(callback) => {
const { role } = req.user;
switch (role) {
case 'Admin':
console.log('case admin is working >> >> >> >> >> >> >> >> >> >> ');
start = moment().startOf('day'); // set to 12:00 am today
end = moment().endOf('day'); // set to 23:59 pm today
query.where = {
entryTime: {
$gt: start,
$lt: end,
},
};
break;
case 'Manager':
console.log('case manager is working >> >> >> >> >> >>> >> >> >> >> >> >> >>');
Staff.findOne({
where: {
loginId: req.user.id,
},
}).then((staffData) => {
console.log('staffData', JSON.stringify(staffData));
query.where = {
entryTime: {
$gt: start,
$lt: end,
},
branchId: staffData.branchId,
};
});
break;
default:
console.log('default case');
}
console.log('query >> >> >> >> >> >> >> >> >> >> >> >> >> >> >>', query);
// query is undefined if my case is manager async call.
Visitor.findAndCountAll(query)
.then((data) => {
dashboard.todayentries = data;
callback();
});
},
], (err) => {
if (err) return res.status(500).send(err);
return res.status(200).send(dashboard);
});
};
如果我的案例是 Manager 查询,则不确定。
If my case is Manager query become undefined.
我已经问过一个异步调用问题,他们建议使用回调,这还可以,但是如何在async.parallel方法中使用嵌套回调?
I already ask one question for async call, they recommended to use callbacks, its okay, but how to use nested callback inside async.parallel method?
注意:我不想删除我的async.parallel方法。
NOTE: I dont want to erase my async.parallel method.
推荐答案
我尝试了另一个回调,工作中很好。
I tried with another callback, Working fine.
这是我尝试过的内容:
exports.getDashboard = (req, res) => {
const dashboard = {};
const query = {};
let start;
let end;
async.parallel([
(callback) => {
const cb = () => {
Visitor.findAndCountAll(query)
.then((data) => {
dashboard.todayentries = data;
callback();
});
}
const { role } = req.user;
switch (role) {
case 'Admin':
start = moment().startOf('day'); // set to 12:00 am today
end = moment().endOf('day'); // set to 23:59 pm today
query.where = {
entryTime: {
$gt: start,
$lt: end,
},
};
cb();
break;
case 'Manager':
Staff.findOne({
where: {
loginId: req.user.id,
},
}).then((staffData) => {
console.log('staffData', JSON.stringify(staffData));
query.where = {
entryTime: {
$gt: start,
$lt: end,
},
branchId: staffData.branchId,
};
cb(); // my custom callback
});
break;
default:
console.log('default case');
}
},
], (err) => {
if (err) return res.status(500).send(err);
return res.status(200).send(dashboard);
});
};
这种好方法吗?
这篇关于如何在async.parallel方法内使异步代码同步-NodeJs的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文