是否有一种方法可以在承诺完成时独立于结果执行一些代码

Is there a way to execute some code when a promise is fulfilled, independently from the outcome?

本文关键字:于结果 独立 结果 执行 完成时 代码 一种 方法 是否 承诺      更新时间:2023-09-26

我需要在履行承诺时执行go()方法,即使有错误。(我正在与后端API交谈,当我有服务器响应时,我需要做一些UI工作,即使是404)。

现在我这样做:

Try.method().then(()=>{
  go();
}).catch({
  go();
})
有没有更好的方法来避免重复的方法调用?

无论结果是什么,都将调用finally()回调:

Try.method().then(()=>{
  go();
}).catch({
  go();
}).finally({
  go();
});

因为你正在使用babeljs,它似乎不支持finally()回调,你可能会摆脱这个:

Try.method().catch(()=>{
  go();
}).then({
  go();
})

第一次捕获错误(如果有错误)的地方,如果没有,它将像往常一样执行.then()

有没有更好的方法来避免重复的方法调用?

不确定是否正确解释上述部分问题?尝试定义一个单独的.then(go, go)链接到api调用的结束

var go = function(data) {
  console.log("go", data)
};
var p = function(args, val) {
  return Promise[args](val)
};
p("resolve", 1).then(go, go);
p("reject", 0).then(go, go);


如果可以使用jQuery,可以尝试使用deferred.always()

var go = function(data) {
  console.log("go", data)
};
var p = function(args, val) {
  return $.Deferred()[args](val)
};
p("resolve", 1).always(go);
p("reject", 0).always(go);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>