
链式Promise
promise 似乎只是对使用回调和 setTimeout() 函数的某种组合的渐进式改进,但 Promise 的功能远不止表面上看到的那样。具体地说,有许多方法可以将 Promise 链接在一起以完成更复杂的异步行为。
对 then()、catch() 或 finally() 的每次调用实际上都会创建并返回另一个新的Promise。 只有在第一个Promise被fullfiled或reject后,第二个promise才会被处理。 考虑这个例子:
const promise = Promise.resolve(42);
promise.then(value => {
console.log(value);
}).then(() => {
console.log("Finished");
});
代码输出如下:
42
Finished
对 promise.then() 的调用会返回一个调用 then() 的第二个 promise。 第二个 then() fullfilment处理程序仅在第一个promise被settled后才被调用。 如果你解开这个例子,它看起来像这样:
const promise1 = Promise.resolve(42);
const promise2 = promise1.then(value => {
console.log(value);
});
promise2.then(() => {
console.log("Finished");
});
在这个无链版本的代码中,promise1.then() 的结果存储在 promise2 中,然后调用 promise2.then() 来添加最终的实现处理程序。 对 promise2.then() 的调用也会返回一个 promise。 这个例子只是没有使用这个promise2。
总结:
记住一点,Promise调用then方法甚至其他的catch等,返回的始终是一个新的Promise。