【发布时间】:2017-10-16 22:41:09
【问题描述】:
我想将来自 3 个不同 Promise 的数据传递到 nodejs 中的渲染函数中,以便与 pug 一起使用。
var promise = require('promise');
var statusChart = new promise(function (resolve, reject) {
a.aggregate(
[
{
$group: {
_id: '$status',
count: {$sum: 1}
}
}
], function (err, status) {
if (err) {
console.log(err);
reject(err);
} else {
resolve(status);
}
});
});
var severityChart = new promise(function (resolve, reject) {
a.aggregate(
[
{
$group: {
_id: '$severity',
count: {$sum: 1}
}
}
], function (err, vuln) {
if (err) {
console.log(err);
reject(err);
} else {
resolve(vuln);
}
});
})
var countChart = new promise(function (resolve, reject) {
a.count(function (err, count) {
if (err) {
console.log(err);
reject(err);
} else {
resolve(count);
}
});
})
statusChart.then((message) => {
console.log(message);
});
severityChart.then((data) => {
console.log(data);
});
countChart.then((item) => {
console.log(item);
});
上面的代码工作正常,会返回我的结果
[ { _id: 'Medium', count: 6 },
{ _id: 'High', count: 15 },
{ _id: 'Low', count: 1 } ]
[ { _id: 'New', count: 1 },
{ _id: 'Closed', count: 1 },
{ _id: 'In Progress', count: 11 },
{ _id: 'Pending', count: 9 } ]
22
问题:如何在渲染函数中传递这些数据。
res.render('graphs', {info: statusChart, vuln: severityChart, count: countChart});
当我以这种方式尝试时,我在哈巴狗方面得到以下结果
var 结果 = {"_75":1,"_83":0,"_18":null,"_38":{"onRejected":null,"promise":{"_75":0,"_83" :0,"_18":null,"_38":null}}}; var status = {"_75":1,"_83":0,"_18":null,"_38":{"onRejected":null,"promise":{"_75":0,"_83":0, "_18":null,"_38":null}}}; var total = {"_75":1,"_83":0,"_18":null,"_38":{"onRejected":null,"promise":{"_75":0,"_83":0, "_18":null,"_38":null}}};
【问题讨论】:
-
使用
Promise.all。 -
你真的应该编写一个辅助函数,它接受一个 id,调用
new Promise和a.aggrate,并返回结果的承诺。
标签: javascript node.js pug