Javascript 迁移不推荐的承诺处理代码
我有一些代码可以处理像这样有角度的承诺Javascript 迁移不推荐的承诺处理代码,javascript,angularjs,promise,Javascript,Angularjs,Promise,我有一些代码可以处理像这样有角度的承诺 somethingThatReturnsAPromise .then(function (data) { // handle success }) .catch(function (error) { // handle error }) .finally(function () { // always do this }); 我知道这种语法现在已经被弃用了,应该用 somethingThatReturn
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
中的代码放在哪里,即在承诺被解析(成功)和拒绝(失败)时执行的代码?如果您想使用那么无论哪种方式,您都可以为成功和错误承诺处理程序提供一个处理程序:
function always() {
// Do whatever either it fails or succeeds
}
somethingThatReturnsAPromise.then(always, always).then(function(data) {
}, function(error) {
});
第一:我没有发现任何与承诺相关的方法在应用程序中被弃用
第二:finally
比athen(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)
);
}
我写这段代码只是为了告诉你最后要做的事。Angular的实现更加平滑,因此请继续使用它
我看不出有任何理由认为catch
或finally
被弃用或永远不会被弃用。你从哪里听说的?如果catch和finally被弃用,我会感到惊讶。catch(f)=然后(null,f)和最后(f)=然后(f,f)是ES6规范的一部分。如果有人反对,我会感到惊讶。