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
比a
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)
    );
}
我写这段代码只是为了告诉你
最后要做的事。Angular的实现更加平滑,因此请继续使用它


我看不出有任何理由认为
catch
finally
被弃用或永远不会被弃用。

你从哪里听说的?如果catch和finally被弃用,我会感到惊讶。catch(f)=然后(null,f)和最后(f)=然后(f,f)
是ES6规范的一部分。如果有人反对,我会感到惊讶。