javascript - js Promise 上下文中的finally 何时被调用?

标签 javascript promise finally

什么时候在 js Promise 上下文中调用finally?

我一开始以为finally将在最后一个 then 之后调用。但后来我明白了,不可能确定最后一个then 。我的以下尝试也证明了这一点:

function f(resolve, reject) {
    resolve("foo");
};
var p = new Promise(f);
p.then(function(data) {
     console.log("data: " + data); 
});
p.finally(function(data) {
     console.log("in finally");
});
p.then(function(data) {
     console.log("data: " + data); 
});

输出:

data: foo
in finally
data: foo

所以,finally在最后一个 then 之后没有被调用。我认为finally应该在 resolve 之后调用然后。但在我上面尝试的示例代码中,我们可以看到情况并非如此(因为注册的 thenresolvefinally 之间被调用)。

因此,我很困惑,不明白finally什么时候会出现?被召唤。

最佳答案

.finally 补充了 thencatch:then block 在执行时被调用,catch 在拒绝时被调用,并且 finally 在两种情况下都会被调用(例如:您进行 API 调用,在 then block 中处理数据,在 catch block 显示错误消息,在 finally block 中隐藏加载微调器)。

然后链条继续。

Promise.reject('execute some action')
  .then(() => console.log('I\'ll handle success here'))
  .catch(() => console.log('error handling'))
  .finally(() => console.log('this block will be executed either way'))
  .then(() => console.log('and the adventure continues'))

关于javascript - js Promise 上下文中的finally 何时被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59435450/

相关文章:

javascript - 我的 setInterval 没有按预期工作

javascript - 如何在同一表单中的 strip 卡验证之前部分验证表单字段

javascript - 什么样的javascript数组使用波浪号~

javascript - JavaScript 中三个点 "..."的作用是什么

javascript - 创建 promise 回调

javascript - Promise 不在 Typescript 中编译

Java - 检测 `finally` block 期间是否有异常发生

javascript - Node.js mysql 查询返回空数组

java - 在 Java 中尝试使用资源时出错

java - 如果在finally block 内关闭多个资源,是否需要异常处理?