我有一个服务,它向控制器返回一个承诺:
// .... in the service
this.RefreshData = function() {
this.data = $q.all( {images: ...., tags: ....});
}
RefreshData ();
// .... in the controller
function() OnImages() {.....};
ImageSrv.data.then(OnImages());
但现在其他地方发生了一些事情,我也想刷新我的控制器。让我们说一些指令称我的服务。并刷新它
ImageSrv.RefreshData();
我的承诺已经改变,OnImages现在不会被解雇。 使用promise +事件处理此问题的正确方法是什么?我真的希望我能做一些像
这样的事情ImageSrv.data.refresh()
这将改变对未经解决的承诺"并尝试再次解决它。
答案 0 :(得分:0)
这不是承诺如何运作的。没有机制让承诺意识到他们已经改变了。承诺只解决(或拒绝)一次,然后完成。没有什么可以告诉您的控制器某些内容已发生变化, function(data) {
return new Promise(function(resolve,reject){
// do a lot of things with data, reject for invalid data
resolve(changed_data);
});
}
需要再次运行。
一种解决方案可能是触发控制器将侦听的某些事件,然后重新运行OnImages
。