【发布时间】:2015-06-21 10:53:59
【问题描述】:
在我的AjaxPromiseService.js 工厂中,我一直在尝试将超时机制合并到promise 调用中(通常是$http.get/post 对远程服务的调用)。我目前正在做的方式是在 $timeout 事件和实际的承诺调用之间创建一个竞赛。示例代码如下(来自我的 AjaxPromiseService.js AngularJS 工厂的代码):also available in this plnkr
var timeoutObj = {"isTimeout": true};
function timeoutPromise(deferredObj) {
$timeout(function() {
console.log("promise timeout");
deferredObj.resolve(timeoutObj);
}, timeoutLimit); // timeoutLimit is in milisecond
}
//promise calls (e.g. $http.get())
function getDummyData(milisec) {
var data = {"data" : "dummy data from ajax!"};
var deferred = $q.defer();
timeoutPromise(deferred); //start the race to see who resolves first
//use $timeout to mimick an AJAX call
$timeout(function() {
deferred.resolve(data);
$timeout.cancel(timeoutPromise(deferred)); //not working, how to cancel the race here?
}, milisec); //
return deferred.promise;
} //getDummyData
这似乎有效,如果getDummyData() 在指定的持续时间内没有解决,timeoutPromise() 将返回有用的标志,这样我就可以让 AJAX 调用优雅地失败。 timeoutPromise() 和 getDummyData() 最终都会按顺序解决,但是,如果首先解决 getDummyData(),我想取消 timeoutPromise()。我想知道如何做到这一点?
【问题讨论】:
标签: javascript ajax angularjs timeout promise