【发布时间】:2016-05-23 11:08:38
【问题描述】:
我正在使用 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);}
}
如上所述,虽然代码可以正常工作,但它不会在天气数据发生变化时更新。
【问题讨论】:
-
不知
this.unblock();是不是罪魁祸首。 -
@dubvfan87 立即尝试。看看能不能解决。
-
unblock与此无关。没有理由相信这段代码首先会是反应式的。数据源是一个 REST 端点,它不是反应式的。除此之外,方法调用也不是反应式的。
标签: javascript meteor