Javascript 一个现有的承诺
我有一个服务,它向控制器返回一个承诺:Javascript 一个现有的承诺,javascript,angularjs,angular-promise,Javascript,Angularjs,Angular Promise,我有一个服务,它向控制器返回一个承诺: // .... in the service this.RefreshData = function() { this.data = $q.all( {images: ...., tags: ....}); } RefreshData (); // .... in the controller function() OnImages() {.....}; ImageSrv.data.then(OnImages()); 但是现在在其他地方发生了
// .... 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不会开火了。
用承诺+事件处理这件事的正确方法是什么?我真希望我能像这样做
ImageSrv.data.refresh()
这会将承诺更改为“未解决”,并再次尝试解决它。这不是承诺的工作方式。没有任何机制可以让承诺意识到它们已经改变了。承诺只解决(或拒绝)一次,然后就完成了。没有任何信息告诉您的控制器发生了变化,并且需要再次运行
OnImages
一种解决方案可能是触发控制器将侦听的某个事件,然后重新运行
OnImages
RefreshData()
不应将承诺存储在中。数据将被消费的位置,而应返回它!每次调用后都要重新连接处理程序。@Bergi我很清楚,无论是谁调用RefreshData,都可以轻松地重新连接他的处理程序。我问的是那些已经连接到上一个promise实例的糟糕的控制器和服务。。。