Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Meteor会话API调用没有反应?_Javascript_Meteor - Fatal编程技术网

Javascript Meteor会话API调用没有反应?

Javascript Meteor会话API调用没有反应?,javascript,meteor,Javascript,Meteor,我正在使用Meteor来显示来自开放天气api的数据。虽然这是可行的,但我遇到的问题是它不会进行反应性更新。这意味着我最终会刷新页面以查看更新的天气 我相信罪魁祸首是我通过onCreated调用此函数。以下是我的客户端代码 Template.weather.helpers({ youweather: function(){ return Session.get('youweather'); } }); Template.weather.onCreated(function(){

我正在使用Meteor来显示来自开放天气api的数据。虽然这是可行的,但我遇到的问题是它不会进行反应性更新。这意味着我最终会刷新页面以查看更新的天气

我相信罪魁祸首是我通过
onCreated调用此函数。
以下是我的客户端代码

Template.weather.helpers({
  youweather: function(){
    return Session.get('youweather');
  }
});

Template.weather.onCreated(function(){
  Meteor.call('calltheweatherman', function(err, res){
    if (err){Session.set('youweather', {error: err});}
    else {Session.set('youweather', res); return res;}
  });
});
我的服务器代码如下所示:

Meteor.methods({
  'calltheweatherman':function(){
    this.unblock();
    var apiUrl = 'http://api.openweathermap.org/data/2.5/weather?q=NorthKorea&units=imperial&appid=myapikeygoaway';
    var response = Meteor.wrapAsync(apiCall)(apiUrl);
    return response;    
  }});

var apiCall = function (apiUrl, callback){
  try {
    var response = HTTP.get(apiUrl).data;
    callback(null, response);
  } catch (error) {
    if (error.response) {
      var errorCode = error.response.data.code;
      var errorMessage = error.response.data.message;
    } else {
      var errorCode = 500;
      var errorMessage = 'Cannot access the API';}
    var myError = new Meteor.Error(errorCode, errorMessage);
    callback(myError, null);}
}
如前所述,虽然代码正常工作,但它不会在天气数据发生变化时更新

  • 方法调用不是被动的数据源
  • HTTP GET请求也不是被动的数据源
  • 顺便提一下:为什么要先将同步HTTP.get函数包装成一个异步函数,然后再使用wrapAsync将其包装,使其再次同步


    如果不至少轮询一个REST端点,就不能使该端点成为反应数据源。

    您所做的这些方法调用不是反应性的。您可以使用
    setInterval
    使其在特定时间间隔重新运行,并从API获取更新的天气数据

    Template.eo_layout.onCreated(function(){
      Meteor.setInterval(function () {
        Meteor.call('calltheweatherman', function(err, res){
        if (err){Session.set('youweather', {error: err});}
        else {Session.set('youweather', res); return res;}
       });
      }, 1000);
    });
    

    我想知道
    this.unblock()是罪魁祸首。@dubvfan87正在尝试。将查看这是否解决了问题。
    取消阻止
    与此无关。没有理由相信这段代码首先是被动的。数据源是一个REST端点,它不是被动的。除此之外,方法调用也不是被动的。atmosphere上还有一个被动的方法包