Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 一个现有的承诺_Javascript_Angularjs_Angular Promise - Fatal编程技术网

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实例的糟糕的控制器和服务。。。