我有一些处理像这样的Angular承诺的代码
somethingThatReturnsAPromise
.then(function (data) {
// handle success
})
.catch(function (error) {
// handle error
})
.finally(function () {
// always do this
});
我理解现在不推荐使用此语法,此代码应替换为
somethingThatReturnsAPromise.then(
function (data) {
// handle success
},
function (error) {
// handle error
}
);
但是在使用这种新语法时,我应该把以前在finally
中的代码放在哪里,即在承诺解决(成功)和拒绝(失败)时执行的代码?
答案 0 :(得分:0)
如果您想以任何方式使用then
,您可以为成功和错误承诺处理程序提供处理程序:
function always() {
// Do whatever either it fails or succeeds
}
somethingThatReturnsAPromise.then(always, always).then(function(data) {
}, function(error) {
});
答案 1 :(得分:0)
第一:我没有找到任何与official docs中弃用的任何(与Promise相关)方法的内容。
第二名:finally
比then(cb, cb)
更复杂,因为它没有捕获错误,并且没有传播回调的结果,但是如果你返回一个承诺,等待这个承诺解决,直到它继续传播当前值。
function _finally(promise, callback) {
var handleValue = isError => value => $q((resolve, reject) => {
//call your callback
//if this throws, propagate the Error
var w = typeof callback === "function" && callback();
//prepare to push the current value/error
var fn = isError?
() => reject(value):
() => resolve(value);
//check wether your callback has returned sth. Promise-like
if(w && typeof w.then === "function"){
//then we'll wait for this to resolve,
//before we continue propagating the current value/error
w.then(fn, fn);
}else{
//otherwise propagate the current value/error emmediately
fn();
}
});
return $q.resolve(promise).then(
handleValue(false),
handleValue(true)
);
}
我编写此代码只是为了让您了解finally
所做的事情。 Angular的实现更顺畅,所以坚持下去。
我认为没有理由认为catch
或finally
已被弃用或将会被弃用。