问题的承诺:秩序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) –