2014-05-14 83 views
0

所以我有这样的服务器文件夹的方法:流星异步问题仅

dataHandler: function(id) 
{ 
    var data; 

    // here I call a server method 
    Meteor.call('getData', id, function(err, result) 
    { 
     data = result; 
    }); 

    // now I want to use data in another method 
    Meteor.call('convertData', data, function(err, result) 
    { 
     data = result; 
    }); 

    return data; 
} 

现在呼吁Meteor.call('convertData' ...)时,将不确定的,这并不工作,为data。我将如何做到这一点,我不能使用Session.set/get服务器端的流星?

回答

1

在服务器上,您可以选择同步调用方法。如果您没有提供默认的回调函数。

如果您未在服务器上传递回调,方法调用将会阻塞,直到方法完成。它最终会返回方法的返回值,或者如果方法抛出异常,它将抛出异常。 - http://docs.meteor.com/#meteor_call

你的代码应该只是这样的:

dataHandler: function(id) { 
    var data = Meteor.call('getData', id); 
    return Meteor.call('convertData', data); 
} 
+0

'如果你不传递回调,你是不是末节里,调用将返回undefined' ...这是什么意思在里面一存根?使用这个时,我总是在'data'上定义未定义。 – jt123

+0

存根是执行延迟补偿的方法的客户端版本。在文档的方法部分的开头详细描述了存根。您复制的句子开始于'在客户端'上。你的问题指定在服务器上。如果方法'getData'返回未定义,那么可能也会显示该代码。 – user728291

0

所以,如果你调用服务器http请求没有它不会继续运行回调。所以,如果你写

data = Meteor.call('getData', id); 

// now I want to use data in another method 
Meteor.call('convertData', data, function(err, result) 
{ 
    data = result; 
}); 

它应该工作的罚款