我有一个非常“慢”的Meteor应用程序,因为有很多API调用。
我尝试做的是拆分加载/调用。
我刚刚做的是:
这对我的应用程序的速度来说已经是一个很大的好处,但是我想要进一步分解它,因为第二个调用实际上更像是5-25个API调用。
所以我现在尝试做的是在渲染函数内部是一个自调用函数,只要没有其他事情可以调用自身并将响应保存在会话中。 (到现在为止它只是重写,但即使到了这一点,我也无法得到)
Template.detail.rendered = function(){
//comma separated list of numbers for the API-Call
var cats = $(this.find(".extra")).attr('data-extra').split(',');
var shop = $(this.find(".extra")).attr('data-shop');
var counter = 0;
var callExtras = function(_counter){
var obj = {
categories : [cats[_counter]],
shop : shop
};
if(_counter <= cats.length){
Meteor.subscribe('extra', obj,function(result){
//TODO dickes todo... nochmal nachdenken und recherchieren
//console.log(_counter);
Session.set('extra',Extra.find('extra').fetch()[0].results);
counter++;
callExtras(counter);
});
}
};
callExtras(counter);
Session.set('loading_msg', '' );
};
现在,我的应用程序的被动部分再次出现问题 - Meteor: iron-router => waitOn without subscribe因为我无法找到更新我的客户端每个用户群集的正确方法。同样在文档中描述了发布方法也创建了一个新集合。 (新文档的ID) - http://docs.meteor.com/#/full/publish_added
这是从服务器发布
Meteor.publish('extra', function(obj){
var that = this;
Meteor.call('extra', obj, function(error, result){
if (result){
//console.log(result);
that.added("extra", "extra", {results: result});
//that.changed('extra','extra',{results: result});
that.ready();
} else {
//that.ready();
}
});
});
所以我的问题是:是否有从头开始构建代码的更好方法意味着以某种方式解决问题?如果不是,我怎么能以最干净的方式实现呢?因为我理解这只是一种奇怪的方式。
编辑:
例如。
我可以执行每用户集合(可能只是像现在这样的客户端)并从服务器推送数据并只订阅此集合吗?但是,我怎样才能检查异步API-Call何时开始下一轮。因此视图逐个获取数据。我现在很困惑。
答案 0 :(得分:0)
我的错很简单,因为我可以:你不需要使用订阅。
我刚刚在Meteor.call的回调中添加了“错误,结果”
只有“结果”导致结果始终未定义。
var cats = $(this.find(".extra")).attr('data-extra').split(',');
var shop = $(this.find(".extra")).attr('data-shop');
var counter = 0;
var callExtras = function(_counter){
var obj = {
categories : [cats[_counter]],
shop : shop
};
if(_counter <= cats.length){
Meteor.call('extra', obj,function(error,result){
var actual_session = Session.get('extra');
if(actual_session === false){
actual_session = [];
}
actual_session = actual_session.concat(result);
Session.set('extra',actual_session);
counter++;
callExtras(counter);
});
}
};
callExtras(counter);
然后在模板助手
中"extra" : function(){
return Session.get('extra');
},