我有以下代码,其中mongoose
的{{1}}方法使用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
但无效,我在屏幕上收到以下错误:
info:TypeError:无法读取属性'discriminatorMapping' 未定义 在findOne [...]
似乎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;
});
}
方法未使用findOne
正确调用,我正在关注Q's API Reference for nfcall function,但我无法理解原因。
答案 0 :(得分:1)
猫鼬已经被宣传了。所以,你的代码可以简单地是:
var _getById = function(id) {
var searchOptions = {
_id: id,
'metadata.isDisabled': false
};
return ApplicationModel.findOne(searchOptions, '-metadata')
.then(function(application) {
if (!application) {
throw new CustomError('Not found', 404);
}
return application;
});
}