再次解决已解决的承诺

时间:2013-10-07 13:26:35

标签: angularjs promise

我正在使用$ q的AngularJS,当我创建一个承诺并且该承诺已经解决时,是否可以再次解决?我不知道这是否可能,但如果没有,我可以一次又一次地解决同样的承诺。我正在考虑使用通知方式,但我不知道是否还有其他方法可以做到这一点。

2 个答案:

答案 0 :(得分:4)

Mastering Web Application Development with Angularjs, by Kozlowski and Bacon,第3章“与后端服务器通信”,“带有$ q的Promise API”部分:

  

一旦解决或拒绝的承诺无法改变其状态。

     

只有一次机会提供承诺的结果。换句话说,不可能

     
      
  • 解决被拒绝的承诺
  •   
  • 使用不同的结果解析已解决的承诺
  •   
  • 拒绝已解决的承诺
  •   
  • 拒绝具有不同拒绝原因的被拒绝承诺
  •   
     

这些规则相当直观。   例如,如果我们可以在披萨成功交付(并且可能已经吃掉!)后披露订单交付存在问题的信息被召回,那就没有多大意义了。

如果您提供更多代码,我们可以更好地了解您的目标,我们可以为您提供帮助。

答案 1 :(得分:0)

我所做的只是再次重新初始化承诺:

var appReadyDeferred = $q.defer();
this.prepareAppReadyDeffered = function() {
  appReadyDeferred = $q.defer();
};
this.appReady = function() {
  return appReadyDeferred.promise;
};
this.appResolve = function() {
  appReadyDeferred.resolve();
};
this.appDeferr = function() {
  appReadyDeferred.reject();
};

所以我可以使用

someService.appReady().then(function() {
   // some code
});

使用

重新启动它
someService.prepareAppReadyDeffered();

我不确定这是最好的解决方案,但似乎有效。