2016-05-23 26 views
-2

Meteorを使って天気予報APIからのデータを表示しています。これが機能する間、私が持っている問題はそれが反応的に更新されないということです。これは、更新された天気を見るためにページをリフレッシュすることを意味します。Meteor Session 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);} 
} 

、それはいつでも気象データの変更を更新しません。

+1

「this.unblock();」が原因ではないかと思います。 – dubvfan87

+0

@ dubvfan87今しよう。それが修正されるかどうかがわかります。 –

+1

'unblock'はそれとは関係ありません。このコードが最初に反応すると信じる理由はありません。データソースはRESTエンドポイントであり、反応しません。そのメソッドの上には呼び出しも反応しません。 –

答えて

1

これらのメソッド呼び出しは反応的ではありません。 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); 
}); 
+1

雰囲気に反応性のあるパッケージもあります –

1
  1. メソッド呼び出しは反応的なデータソースではありません。
  2. HTTP GETリクエストは、無効なデータソースでもありません。

なぜ、同期HTTP.get関数を最初に非同期関数にラップしてから、もう一度wrapAsyncでラップするのですか?再び同期させるのはなぜですか?

少なくともそのエンドポイントをポーリングすることなく、RESTエンドポイントを無効なデータソースにすることはできません。