【发布时间】:2018-09-30 07:55:15
【问题描述】:
我的后端代码如下:
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 查询变得未定义。
我已经问了一个异步调用的问题,他们建议使用回调,没关系,但是如何在 async.parallel 方法中使用嵌套回调?
注意:我不想删除我的 async.parallel 方法。
【问题讨论】:
-
问题为什么有promise标签?如果你使用它们,情况会完全不同,而且可能更合理。
-
How to make async code into sync这是不可能的 - 你只需要想想为什么代码是asynchronous就可以理解为什么它不能被生成synchronous- 提示:javascript 无法预测未来 -
查看
asynclib 的最新版本,看起来您可以在回调中返回承诺,所以不要忘记返回承诺.. 例如。return Staff.findOne({也是你的Visitor.findAndCountAll(只是想放置在async.parallel的回调中,如果你希望在所有其他承诺完成后执行。 -
async/await怎么样? developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
标签: javascript node.js callback async.js