我有以下代码,其中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 [...]
似乎
findOne
方法未使用Q.nfcall
正确调用,我正在使用Q's API Reference for nfcall function,但我无法理解原因。 最佳答案
猫鼬已经被许诺了。因此,您的代码可以简单地是:
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;
});
}