【问题标题】:angular reload an existing promise角度重新加载现有的承诺
【发布时间】:2015-07-12 09:18:49
【问题描述】:

我有一个向控制器返回承诺的服务:

// .... 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() 

这会将承诺更改为“未解决”并尝试再次解决它。

【问题讨论】:

  • RefreshData() 不应该将 promise 存储在消耗它的 .data 中,而是 return 它!您需要在每次调用后重新附加处理程序。
  • @Bergi 我很清楚,无论谁调用了 RefreshData,都可以轻松地重新附加他的处理程序。我问的是所有已经附加到前一个承诺实例的可怜的控制器和服务......

标签: javascript angularjs angular-promise


【解决方案1】:

这不是承诺的工作方式。没有任何机制可以让 Promise 意识到它们已经改变。 Promise 只解决(或拒绝)一次,然后就完成了。没有什么可以告诉您的控制器发生了变化,OnImages 需要再次运行。

一种解决方案可能是触发您的控制器将侦听的某些事件,然后重新运行OnImages

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 2015-10-27
    • 2016-07-08
    • 1970-01-01
    相关资源
    最近更新 更多