这很奇怪但是当我从Meteor.method
函数调用外部函数时,它总是会在我尝试Meteor.wrapAsync
的客户端中返回undefined但我觉得我做错了。这是我的代码:
var demoFunction = function () {
//database operations
var user = this.userId;
if (!user)
return;
var count = Users.aggregate([
{ $group: {_id: null, count: {$sum: 1}} }
]);
if (count[0] && count[0].count)
return count[0].count;
return 0;
}
Meteor.methods({
// NOT WORKING, How can I make this work?
methodDemo: function () {
var result = demoFunction ();
return result;
},
// Works
methodDemo2: function () {
//database operations
var user = this.userId;
if (!user)
return;
var count = Users.aggregate([
{ $group: {_id: null, count: {$sum: 1}} }
]);
if (count[0] && count[0].count)
return count[0].count;
return 0;
}
});
// Call from client
Meteor.call("methodDemo", function (err, res) { });
如果我把代码放在流星方法中,为什么调用外部函数的方式不一样?
答案 0 :(得分:1)
尝试在您的函数中使用Meteor.userId()
而不是this.userId
。我认为你在调用你的函数时会失去this
的值,导致它提前退出。
答案 1 :(得分:0)
由于您使用var
声明了该函数,因此它的范围在methodDemo()
之外。
您可以通过删除var
或将demoFunction()
代码移至methodDemo()
来全局声明该功能。