【发布时间】:2017-03-16 05:40:37
【问题描述】:
如果我的 promise 未能在 300 毫秒内返回结果,我希望我的 promise 失败,如果失败,我希望调用另一个 promise,它将执行一个执行时间更短的默认函数。
到目前为止我已经尝试过 -
$timeout(function(){
GetAirMsg.get({mDate: $filter('date')($scope.realdateFrom,'ddMMyy'),
mDateO: $filter('date')($scope.realdateFrom,'yyyyMMdd'),
mDateD: $filter('date')($scope.realdateFrom,'dd-MMM-yyyy'),
acode: $filter('uppercase')($scope.air),
offset: offsetInt}).$promise.then(function(result){
/* result evaluation */
});
},300).then(function(data){
console.log('Timed out! sorry!');
/*execute another promise with shorter execution time */
console.log('data : '+data);
},function(error){
//console.log('Timed out! sorry!');
});
服务是 -
angular.module('example').factory('GetAirMsg',['$resource',function($resource){
return $resource(serverBaseUrl + '/getAirMsg/:mDate/:mDateO/:mDateD/:acode/:offset',
{mDate: '@mDate',mDateO: '@mDateO',mDateD: '@mDateD',acode: '@acode',offset: '@offset'}, {
get: {method: 'GET', isArray: false}
});
}])
服务 GetAirMsg 执行一个查询,该查询占用了几个值的大量时间,该查询目前已尽可能优化。所以我想要一个只返回基本信息的后备。
现在面临的问题 - 控制台总是显示 '时间到!对不起! 数据:未定义'。对于在该时间范围内未返回值的情况,请求仍处于挂起状态。
【问题讨论】:
-
如果你想在失败时执行另一个 Promise。在
.then()之后使用.catch()。而不是在.then()之后的(err)。 -
@ReyanTropia 如果我的承诺未能在 300 毫秒内返回结果,我该如何让我的承诺失败,因为现在呼叫在我的网络中仍处于挂起状态?我是 Angular 的新手,我不知道该怎么做。 TIA :)
-
这很奇怪。您的请求状态仍然是
pending?那么 .then(data) 根本不应该触发。顺便说一句Promises不可取消。只能取消Observables。 -
@ReyanTropia 现在无论请求的状态如何,都会显示 console.log 消息
标签: angularjs timeout angular-promise