問題的承諾:秩序AngularJS
是否有一個「簡單」的方式取消($q
-/$http
- )承諾在AngularJS或確定的順序失信得到解決?
例
我有一個長期運行的計算和I請求經由$http
結果。某些操作或事件要求我重新開始計算(並因此發送新的$http
請求),然後解決初始承諾。因此,我想我不能用一個簡單的實現像
$http.post().then(function(){
//apply data to view
})
,因爲我不能保證回覆回來的,我做到了發送請求的順序 - 畢竟我要顯示的結果當所有承諾得到妥善解決時的最新計算。
但是我想避免等待第一個響應,直到我發這樣一個新的請求:
const timeExpensiveCalculation = function(){
return $http.post().then(function(response){
if (isNewCalculationChained) {return timeExpensiveCalculation();}
else {return response.data;}
})
}
思考:
當使用$http
我可以訪問config-對象使用一些時間戳或其他標識符來手動排序傳入響應。不過,我希望我可以以某種方式告訴角色取消過時的承諾,因此不會在解析後運行.then()函數。
儘管如此,如果沒有手動執行$q
而不是$http
,那麼這不起作用。
也許只是立即拒絕承諾就是要走的路?但是在這兩種情況下,它可能會一直持續下去,直到在下一個請求產生之前最終解決承諾(在此期間導致空視圖)。
是否存在一些我缺少的角度API函數,或者是否存在強大的設計模式或帶有承諾鏈接的「技巧」或$ q.all來處理返回「相同」數據的多個承諾?
不知道你用什麼API,但在我的.net apis我用SignalR來處理這樣的場景。 – jbrown
偉大的問題,期待着答案。但是,如果處理邏輯內部的邏輯不是很容易,而不是試圖避免承諾解決? – user2263572
[Promise可能重複 - 是否可以強制取消承諾](http://stackoverflow.com/questions/30233302/promise-is-it-possible-to-force-cancel-a-promise) –