2015-10-20 96 views
-1

我目前正在尝试学习如何在流星中执行HTTP请求。当我运行代码时,我可以正确地在控制台中查看数据。但是,在客户端,我所得到的是“未定义”。我相信我正在同步运行HTTP.get方法。流星HTTP.call未定义在客户端,在服务器端工作

.js文件

if (Meteor.isClient) { 
    Template.test.helpers({ 

     testGET: function(){ 
      var origin = Meteor.call('fetchFromService'); 
      console.log(origin); //-- Displays 'Undefined' 
     } 

    }); 
} 

if (Meteor.isServer) { 
    Meteor.methods({ 
     fetchFromService: function() { 
      this.unblock(); 
      var url = "https://httpbin.org/get"; 
      var result; 

      try{ 
       result = HTTP.get(url); 
      } catch(e) { 
       result = "false"; 
      } 

      console.log(result.data.origin); //-- Displays the data properly 
      return result.data.origin; 
     } 
    }); 
} 
+0

阅读: [https://www.discovermeteor.com/blog/understanding-sync-async-javascript-node/](https://www.discovermeteor.com/blog/understanding-sync-async- javascript-node /) 然后,在Meteor文档中: [http://docs.meteor.com/#/full/meteor_call](http://docs.meteor.com/#/full/meteor_call) 在客户端上,如果您未传递回调并且您不在存根中,则调用将返回** undefined **,您将无法获取方法的返回值。这是因为客户端没有光纤,所以实际上没有任何方法可以阻止远程执行方法 –

回答

0

这是异步,你有一个回调传递给call功能:

var origin = Meteor.call('fetchFromService', function(err, data) { 
    console.log(data); 
}); 

如果不通过回调,originundefined,直到请求结束。

+0

谢谢。我还发现了一篇文章,对我的理解进行了更好的解释。 [https://www.discovermeteor.com/blog/understanding-sync-async-javascript-node/](https://www.discovermeteor.com/blog/understanding-sync-async-javascript-node/) –

相关问题