簡體   English   中英

再次解決已解決的承諾

[英]Resolving the resolved promise again

我使用的是AngularJS的$ q,當我創建一個Promise且該Promise已經解決時,可以再次解決嗎? 我不知道這是否可能,但如果沒有,我可以一次又一次地解決同樣的承諾。 我當時在考慮使用通知方式,但是我不知道是否還有其他方式可以做到這一點。

摘自Kozlowski和Bacon的精通Angularjs的Web應用程序開發 ,第3章“與后端服務器通信”,“帶$ q的Promise API”部分:

曾經被解決或拒絕的承諾不能更改其狀態。

提供承諾結果的機會只有一次。 換句話說不可能:

  • 解決被拒絕的承諾
  • 解決一個已經解決的承諾並產生不同的結果
  • 拒絕達成承諾
  • 用不同的拒絕原因拒絕被拒絕的承諾

這些規則非常直觀。 例如,如果在成功發送(或可能已吃完)比薩之后,可以通過信息告知我們比薩訂單發送有問題,回去沒有多大意義。

如果您提供更多代碼,並且我們可以更好地了解您要執行的操作,我們可能會為您提供幫助。

我所做的只是再次像這樣重新初始化promise:

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();

我不確定這是否是最佳解決方案,但它似乎可行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM