Return 猫鼬模型函数的结果
Return the result of a mongoose model function
我正在使用 node.js 和猫鼬开发 Restful API。我需要 return 一个包含搜索结果的对象。这是我的代码:
var Get = function (criteria) {
var result;
Users.findOne(criteria, function(err, res){
console.log('Error: ' + err);
console.log('Results: ' + res);
result = err || !res ? err || errors['404']: res;
console.log(result);
});
console.log('Final results: ' + JSON.stringify(result));
return result;
};
因为我遇到了问题,所以我添加了那些 console.logs 来观察结果丢失的地方。这是日志:
Final results: undefined
Error: null
Results: { //user... }
我需要 returned 那个结果。我该如何解决这个问题?
这是互联网历史上被问得最多的问题之一!
由于节点是异步的,因此您需要将函数重写为 return 回调或使用类似 promises 的东西。
这是回调:
var Get = function (criteria, cb) {
return Users.findOne(criteria,cb);
};
然后这样称呼它:
Get({}, function(err, res){
console.log(res);
});
或者你可以使用promises,这里是使用Q库
var Get = function (criteria) {
var deferred = Q.defer();
Users.findOne(criteria,function(err, o){
if (err) deferred.reject(err);
deferred.resolve(o);
});
return deferred.promise;
}
然后这样称呼它:
Get({}).then(function(res){console.log(res)});
基于 promise 的版本对我来说似乎更复杂 :)。
我正在使用 node.js 和猫鼬开发 Restful API。我需要 return 一个包含搜索结果的对象。这是我的代码:
var Get = function (criteria) {
var result;
Users.findOne(criteria, function(err, res){
console.log('Error: ' + err);
console.log('Results: ' + res);
result = err || !res ? err || errors['404']: res;
console.log(result);
});
console.log('Final results: ' + JSON.stringify(result));
return result;
};
因为我遇到了问题,所以我添加了那些 console.logs 来观察结果丢失的地方。这是日志:
Final results: undefined
Error: null
Results: { //user... }
我需要 returned 那个结果。我该如何解决这个问题?
这是互联网历史上被问得最多的问题之一!
由于节点是异步的,因此您需要将函数重写为 return 回调或使用类似 promises 的东西。
这是回调:
var Get = function (criteria, cb) {
return Users.findOne(criteria,cb);
};
然后这样称呼它:
Get({}, function(err, res){
console.log(res);
});
或者你可以使用promises,这里是使用Q库
var Get = function (criteria) {
var deferred = Q.defer();
Users.findOne(criteria,function(err, o){
if (err) deferred.reject(err);
deferred.resolve(o);
});
return deferred.promise;
}
然后这样称呼它:
Get({}).then(function(res){console.log(res)});
基于 promise 的版本对我来说似乎更复杂 :)。