在 ES7 中,Promise.prototype.finally() 方法被引入到了 Promise 中。它能够在 Promise 执行结束后,无论是成功还是失败,都能够执行一段指定的代码。然而,这个方法在使用过程中也存在一些常见的问题和错误,下面我们来详细了解一下。
Promise.prototype.finally() 方法的使用方法
Promise.prototype.finally() 方法接受一个回调函数作为参数,并且该回调函数没有任何参数,只有一个返回值,返回值会被忽略。该方法返回一个新的 Promise 对象,该 Promise 对象的状态和值与原 Promise 对象保持一致。
下面是 Promise.prototype.finally() 方法的使用示例:
-- -------------------- ---- ------- ----- ------- - ---------------------- ------- ------- ------------ -- - ------------------- -- ------------ -- - -------------------- -- ----------- -- - -------------------- ----------- --
在上面的代码中,我们创建了一个 Promise 对象,然后在该 Promise 对象上调用了 then() 方法和 catch() 方法。最后,我们在 Promise 对象上调用了 finally() 方法,并传入一个回调函数。当 Promise 对象执行结束时,不管是成功还是失败,都会执行 finally() 方法中的回调函数。
常见问题和错误
1. finally() 方法中的回调函数没有返回值
Promise.prototype.finally() 方法中的回调函数没有返回值,只有一个返回值,而且该返回值会被忽略。如果你在回调函数中返回了一个值,那么该值会被忽略,不会影响 Promise 的状态和值。
const promise = Promise.resolve('hello world') promise .finally(() => { return 'ignored' }) .then(result => { console.log(result) // 'hello world' })
在上面的代码中,我们在 finally() 方法中返回了一个值,但是该值会被忽略,不会影响 Promise 的状态和值。
2. finally() 方法中的回调函数返回一个 Promise 对象
如果 finally() 方法中的回调函数返回一个 Promise 对象,那么该 Promise 对象会被等待,直到该 Promise 对象执行结束后,再继续执行后面的 then() 方法或 catch() 方法。
-- -------------------- ---- ------- ----- ------- - ---------------------- ------- ------- ----------- -- - ------ --- --------------- -- - ------------- -- - -------------------- ----------- --------- -- ----- -- -- ------------ -- - ------------------- -- ------ ------ --
在上面的代码中,我们在 finally() 方法中返回了一个 Promise 对象,该 Promise 对象会在 1 秒钟后执行结束。在该 Promise 对象执行结束后,才会执行后面的 then() 方法。
3. finally() 方法中的回调函数抛出异常
如果 finally() 方法中的回调函数抛出异常,那么该异常会被捕获,并且会影响 Promise 的状态和值。
-- -------------------- ---- ------- ----- ------- - ---------------------- ------- ------- ----------- -- - ----- --- -------------- --------- -- ------------ -- - ------------------- -- ------------ -- - ---------------------------- -- -------- -------- --
在上面的代码中,我们在 finally() 方法中抛出了一个异常,该异常会被捕获,并且会影响 Promise 的状态和值。
结论
Promise.prototype.finally() 方法是一个非常实用的方法,它可以让我们在 Promise 执行结束后,无论是成功还是失败,都能够执行一段指定的代码。在使用该方法时,需要注意回调函数的返回值和异常处理,避免出现常见的问题和错误。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67594b0e36908a98ca6cb9c0