jus*_*ris 29 javascript promise angularjs
我需要创建链式承诺:
var deferred = $q.defer();
$timeout(function() {
deferred.reject({result: 'errror'});
}, 3000);
deferred.promise.then(angular.noop, function errorHandler(result) {
//some actions
return result;
}).then(function successCallback(result) {
console.log('what do I do here?');
return result;
}, function errorCallback(result) {
$scope.result= result;
return result;
});
Run Code Online (Sandbox Code Playgroud)
如果我将errorCallback放入第一个then,则第二个then将被解析,并且将调用其successCallback.但如果我删除,errorHandler那么第二个承诺将被拒绝.
根据Angular JS文档,传播拒绝的唯一方法是返回$q.reject();并且看起来并不明显,特别是因为$q即使不需要也必须注入服务;
它也可以通过抛出异常来完成errorHandler,但它将异常跟踪写入控制台,这并不好.
还有另一种选择以明确的方式做到这一点吗?那是什么原因?为什么这样做?在这种情况下,当前的行为可能有用吗?
小智 68
这就是它完成的原因.在这种情况下,当前的行为可能有用吗?
在errorHandler中,您可以尝试修复错误状态并以某种方式解决promise.
var retriesCount = 0;
function doWork()
{
return $http.post('url')
.then(function(response){
// check success-property of returned data
if(response.data.success)
// just unwrap data from response, may be do some other manipulations
return response.data;
else
// reject with error
return $q.reject('some error occured');
})
.catch(function(reason){
if(retriesCount++ < 3)
// some error, let me try to recover myself once again
return doWork();
else
// mission failed... finally reject
return $q.reject(reason);
});
}
doWork().then(console.log, console.error);
Run Code Online (Sandbox Code Playgroud)
晚到晚会,但我在这里;
我更喜欢将$http错误用于其本机错误处理,而不是通过200响应中的错误状态返回成功.
控制台中的打印400或500错误不是问题,如果你正在调试,你会看到它们,如果你不是.
angular.module('workModule', [])
// work provider handles all api calls to get work
.service('workProvider', ['$http', '$q', function($http, $q) {
var endpoint = '/api/v1/work/';
this.Get = function(){
// return the promise, and use 404, 500, etc for errors on the server
return $http.get(endpoint);
};
}])
.controller('workController', ['workProvider', function('workProvider'){
workProvider.Get().then(
function(response){ // success
console.log(response.data);
},
function(response){ // error
console.log(response.data);
}
)
}])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37202 次 |
| 最近记录: |