为什么这与Meteor.methods没有同步/异步问题

时间:2015-07-05 18:03:05

标签: meteor

这很奇怪但是当我从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) { });
如果我把代码放在流星方法中,为什么调用外部函数的方式不一样?

2 个答案:

答案 0 :(得分:1)

尝试在您的函数中使用Meteor.userId()而不是this.userId。我认为你在调用你的函数时会失去this的值,导致它提前退出。

答案 1 :(得分:0)

由于您使用var声明了该函数,因此它的范围在methodDemo()之外。

您可以通过删除var或将demoFunction()代码移至methodDemo()来全局声明该功能。