请参阅演示here
function get(url) {
return $http.get(url)
.then(function(d){
return d.data
},
function(err){ //will work without handling error here, but I need to do some processing here
//call gets here
//do some processing
return err
})
}
get('http://ip.jsontest.co')
.then(function(response){
$scope.response = "SUCCESS --" + JSON.stringify(response);
}, function(err){
$scope.response = "ERROR -- " + err;
})
我有一个库函数get
,它返回一个promise。我在那里处理错误,并返回它(我评论//do some processing
)。我期待在客户端,它调用错误/失败处理程序。而是打印"SUCCESS --" + error
我可以使用$q
和reject
来完成这项工作,但有没有办法?
答案 0 :(得分:0)
将return err
替换为$q.reject(err)
,当然需要注入$q
。
在promise链接中,如果要将错误传递下来,则需要从当前错误处理程序返回被拒绝的promise。否则,如果返回值是立即值或已解决的promise,则认为错误被处理,因此以后的错误处理程序将不会被调用。
答案 1 :(得分:0)
一般而言:
在同步方案中,您的代码是:
function get(url){
try{
return $http.get(url);
} catch(err){
//handle err
}
}
如果你想进一步传递,你需要重新抛出:
function get(url){
try{
return $http.get(url);
} catch(err){
//handle err
throw err;
}
}
承诺就是这样:
function get(url){
return $http.get(url)
.then(function(d){
return d.data
},
function(err){ //will work without handling error here
//call gets here
//do some processing
throw err; // note the throw
})
};
或者甚至更复杂的语法:
function get(url){
return $http.get(url).catch(function(err){
// do some processing
throw err;
});
}