【发布时间】:2016-04-14 23:56:31
【问题描述】:
我有以下代码,其中mongoose 的findOne 方法使用Q.promise 包装:
// _getById should be returning a Promise
var _getById = function(id) {
return Q.Promise(function(resolve, reject) {
ApplicationModel.findOne({
_id: id,
'metadata.isDisabled': false
},
'-metadata',
function(err, application) {
if (err) {
return reject(err);
}
if (!application) {
return reject(new CustomError('Not found', 404));
}
resolve(application);
});
});
}
我正在尝试使用Q.nfcall 方法重构该代码,这就是我目前所拥有的:
var _getById = function(id) {
var searchOptions = {
_id: id,
'metadata.isDisabled': false
};
return Q.nfcall(ApplicationModel.findOne, searchOptions, '-metadata')
.then(function(application) {
if (!application) {
throw new CustomError('Not found', 404);
}
return application;
});
}
但它不起作用,我在屏幕上收到以下错误:
信息:TypeError:无法读取属性“discriminatorMapping”的 不明确的 在 findOne [...]
似乎没有使用Q.nfcall 正确调用findOne 方法,我正在关注Q's API Reference for nfcall function,但我不明白为什么。
【问题讨论】:
-
你知道
mongoose已经被承诺了吗?return ApplicationModel.findOne(ApplicationModel.findOne, searchOptions, '-metadata').then( ... ); -
@ShanShan 是吗?我有第一个通知! (如果我这样做了,我就不会承诺了^^)
-
是的,试试我写的代码,应该可以的。不过你有一个借口,猫鼬文档不是最容易阅读的:p
-
@ShanShan hahaha 我同意,它们不是最简单的!谢谢!! :-) 我现在要试试。您可以将其发布为答案,我会将其标记为正确。
-
@ShanShan 完美运行!继续,回答问题! :-)
标签: node.js mongoose promise q