我很难理解为什么Bluebird的Promise.promisify没有宣传我的查询功能,因为它像大多数节点样式函数一样需要回调。可能是Mongoose的aggregate()方法破坏了代码吗?
function query(callback) {
model.aggregate([{$sort:{a: -1}}], function(err, items) {
if (err) {
console.log(err);
}
let mostA = items[0].a;
Caller.aggregate([{$sort:{b: -1}}], function(err, items) {
if (err) {
console.log(err);
}
let mostB = items[0].b;
callback({mostA: mostA, mostB: mostB});
});
});
};
let most = Promise.promisify(query);
most()
.then((data) => {
// do something
})
.catch((err) => {
console.log('err:', err); // I always get an error.
});
答案 0 :(得分:2)
这不是节点样式的回调。节点样式回调必须执行以下操作:
此外,您的query()
函数无法正确处理错误。它需要以错误值作为第一个参数调用回调,然后停止进一步处理。
所以,当你这样做时:
callback({mostA: mostA, mostB: mostB});
你告诉回调有一个错误,因为你将第一个参数作为一个truthy值传递。
如果你想使它成为正确的形式,你会这样做:
callback(null, {mostA: mostA, mostB: mostB});