finally 表示不是最终的意思,而是无论如何都会执行的意思
Promise.resolve("kaimo666") .finally((data) => { console.log("resolve--finally-->", data); }) .then((data) => { console.log("resolve--finally--then-->", data); }); Promise.reject("kaimo777") .finally((data) => { console.log("reject--finally-->", data); }) .catch((err) => { console.log("reject--finally--err-->", err); });
如果返回一个 promise 会等待这个 promise 也执行完毕,如果是失败的 promise 会用它的失败原因传给下一个
下面实现一个 promise 的 finally 方法:
Promise.prototype.finally = function (callback) { // Promise.resolve(callback()) 包装一下 callback(),让其始终是一个 promise,有 then 方法 return this.then( (value) => { // 成功就需要把成功的值传递下去 return Promise.resolve(callback()).then(() => value); }, (reason) => { // 失败就需要把失败的原因抛出去 return Promise.resolve(callback()).then(() => { throw reason; }); } ); };
测试:
Promise.resolve("kaimo888") .finally((data) => { console.log("finally-->", data); return new Promise((resolve, reject) => { setTimeout(() => { resolve("okk"); }, 3000); }); }) .then((data) => { console.log("then-->", data); }) .catch((err) => { console.log("err-->", err); });