承诺中的执行顺序 finally()
execution order finally() in promises
我期待在解决所有承诺后最终 运行,但我看到它在解决第一个承诺后 运行s。所以我有两个问题:
(1) finally per promise 和 catch 一样吗,也就是说,我可以有一个 finally per promise 还是因为这个行为?
(2) 如果我在解决所有承诺后需要一个 finally 到 运行,那么我最后只需要一个,就像 catch 一样吗?
let variable = new Promise((resolve, reject) => {
console.log('empiezo 1era promesa, espero 9');
setTimeout(() => {
resolve(1);
}, 9000);
})
.finally(() => {
console.log('empieza finally');
})
.then(data => {
return new Promise((resolve, reject) => {
console.log('1era promesa resulta, empiezo 2da promesa, espero 5 seg');
setTimeout(() => {
resolve(2);
}, 5000);
});
})
.then(data => {
console.log('2da promesa resulta, ya termino todo');
console.log(data);
})
输出:
empiezo 1era promesa, espero 9
empieza 终于
1era promesa resulta, empiezo 2da promesa, espero 5 seg
2da promesa resulta, ya termino todo
2
我的疑问是因为我总是看到最后只有一个 finally 的示例,而这个是在解决所有承诺之后执行的。
所有 then
、catch
和 finally
方法都是“按承诺”,即调用它们的承诺。他们都是 return 一个新的承诺,将在回调 运行 之后解决,并且他们不知道链下(甚至其他链中)的任何其他承诺。
如果你希望你的 finally
回调到 运行 在你链中的所有 promise 都已经解决之后,你也应该把它链在最后。
我期待在解决所有承诺后最终 运行,但我看到它在解决第一个承诺后 运行s。所以我有两个问题: (1) finally per promise 和 catch 一样吗,也就是说,我可以有一个 finally per promise 还是因为这个行为? (2) 如果我在解决所有承诺后需要一个 finally 到 运行,那么我最后只需要一个,就像 catch 一样吗?
let variable = new Promise((resolve, reject) => {
console.log('empiezo 1era promesa, espero 9');
setTimeout(() => {
resolve(1);
}, 9000);
})
.finally(() => {
console.log('empieza finally');
})
.then(data => {
return new Promise((resolve, reject) => {
console.log('1era promesa resulta, empiezo 2da promesa, espero 5 seg');
setTimeout(() => {
resolve(2);
}, 5000);
});
})
.then(data => {
console.log('2da promesa resulta, ya termino todo');
console.log(data);
})
输出: empiezo 1era promesa, espero 9 empieza 终于 1era promesa resulta, empiezo 2da promesa, espero 5 seg 2da promesa resulta, ya termino todo 2
我的疑问是因为我总是看到最后只有一个 finally 的示例,而这个是在解决所有承诺之后执行的。
所有 then
、catch
和 finally
方法都是“按承诺”,即调用它们的承诺。他们都是 return 一个新的承诺,将在回调 运行 之后解决,并且他们不知道链下(甚至其他链中)的任何其他承诺。
如果你希望你的 finally
回调到 运行 在你链中的所有 promise 都已经解决之后,你也应该把它链在最后。