[英]Returning data in function outside Mongoose
我正在編寫一個函數,並且希望能夠返回我的Mongoose查詢數據,因此可以使用它。 但是,我只能在.exec函數中訪問sum。 我如何在外部獲取它,以便在調用函數時將其返回?
function get_likes(user){
var Image = require('./models/image');
var query = Image.find({'author' : user});
query.exec(function (err, collected) {
if (err) return console.error(err);
var sum = 0;
for(var i=0;i<collected.length-1;i++){
sum += collected[i].like_count;
}
// I CAN PRINT SUM HERE
console.log(sum);
return sum;
});
// SUM DOESN'T EXIST OUT HERE.
return sum;
}
你不能直接。 node.js使用回調和事件來處理其異步操作。 最好的選擇就是擁抱它。
您可以通過采用一個Promise庫( http://howtonode.org/promises )間接地做到這一點,但這僅是偽造的同步操作。
使用回調函數進行響應
function get_likes(user, cb){
var Image = require('./models/image')
var query = Image.find({'author' : user});
query.exec(function (err, collected) {
if (err) return console.error(err);
var sum = 0;
for(var i=0;i<collected.length-1;i++){
sum += collected[i].like_count;
}
// I CAN PRINT SUM HERE
console.log(sum);
cb(sum);
});
}
或者,如果您將其用作api,則可以使用res.send({“ sum”:sum});
function get_likes(user, req, res){
var Image = require('./models/image');
var query = Image.find({'author' : user});
query.exec(function (err, collected) {
if (err) return res.status(400).send({"error":"unable to connect"});
var sum=0;
for(var i=0;i<collected.length-1;i++){
sum += collected[i].like_count;
}
// I CAN PRINT SUM HERE
console.log(sum);
res.status(200).send({"sum": sum});
});
}
我將node / express作為示例服務器。
您的get_likes函數是異步的,因此應該有一個回調
function get_likes(user, callback){
var Image = require('./models/image');
var query = Image.find({'author' : user});
query.exec(function (err, collected) {
if (err) return callback(err);
var sum = 0;
for(var i=0;i<collected.length-1;i++){
sum += collected[i].like_count;
}
// I CAN PRINT SUM HERE
console.log(sum);
callback(null, sum);
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.