无法通过函数调用(方法)

时间:2015-03-03 15:10:10

标签: javascript meteor functional-programming

我试图将一个函数作为参数传递,但由于某种原因,这并不起作用。调试时我最终会遇到这种情况:

使用server / twitter.js:

Meteor.methods({
  mytweets: function(callback){
    //someday I'll asynchronously get some tweets, then callback.
    console.log("server got callback=",callback)
  }
})

这有效:

在/client/views/twitter.js中:

Template.twitter.created = function(){
  Meteor.call("mytweets",123);
}

这会正确记录server got callback=123,此时一切正常。但是以下工作没有成功:

这不会奏效。为什么?

Meteor.call('mytweets', function(){
  return 123;
})

传递函数时,输出为server got callback= undefined

知道为什么吗?

注意:我是meteor和javascript的新手,所以我还不知道(还)是否更像是javascript或与流星相关的问题。我以两种方式标记。

提前致谢!!

2 个答案:

答案 0 :(得分:1)

根据Meteor.call文档,Meteor.call期望EJSON-able Objects作为参数,最后是回调,它不会传递给方法本身。这就是为什么mytweets没有收到你的回调作为参数,但是123呢。

但是,如果mytweets应该是异步的(服务器端),则必须使用Meteor插件。为此目的,请查看meteor-sync-methods

答案 1 :(得分:1)

Meteor.call('方法')主要用于从客户端调用服务器方法,因此您无法真正传递回调方法。 Meteor.call()的最后一个参数是异步回调。因此,一旦方法调用完成,就会调用它,这就是你可以将它取回的方法。您可以返回数据,并将其作为结果对象传递。

// On client
Meteor.call('methodName', input1, input2, function (error, result) {
    if (error) {
       // Handle error
    }
    console.log(result.data);
});

// On server
Meteor.methods({
    methodName: function (input1, input2) {
        // Do stuff.
       return {status: success, data: 'something here'};
    }
});