Promise 是 JavaScript 中处理异步编程的一种方式,ES6 中引入的 Promise 对象可以帮助我们更好地处理异步操作的结果。而在 ES9 中,Promise 对错误处理提供了更多的帮助。
Promise 中的错误处理
在 Promise 中,我们可以使用 .then()
和 .catch()
方法来处理异步操作的结果。.then()
方法处理异步操作成功的情况,而 .catch()
方法则处理异步操作失败的情况。例如:
fetch('https://jsonplaceholder.typicode.com/todos/1') .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error(error));
在上面的例子中,我们使用 fetch
方法来获取一个 JSON 数据,然后使用 .then()
方法处理成功的情况,使用 .catch()
方法处理失败的情况。
但是,在 Promise 中,错误处理还有一些问题。比如说,如果我们在 .then()
方法中抛出一个错误,这个错误将不会被 .catch()
方法捕获。例如:
// javascriptcn.com 代码示例 fetch('https://jsonplaceholder.typicode.com/todos/1') .then(response => { if (response.status !== 200) { throw new Error('Network error'); } return response.json(); }) .then(data => console.log(data)) .catch(error => console.error(error));
在上面的例子中,如果 HTTP 响应的状态码不是 200,我们会抛出一个错误,但是这个错误并不会被 .catch()
方法捕获。
ES9 中的 Promise 对错误处理的帮助
在 ES9 中,Promise 对错误处理提供了更多的帮助。ES9 引入了一个新的方法 Promise.prototype.finally()
,这个方法可以在 Promise 执行完毕后无论成功还是失败都会执行。例如:
// javascriptcn.com 代码示例 fetch('https://jsonplaceholder.typicode.com/todos/1') .then(response => { if (response.status !== 200) { throw new Error('Network error'); } return response.json(); }) .then(data => console.log(data)) .catch(error => console.error(error)) .finally(() => console.log('Promise completed'));
在上面的例子中,无论 Promise 成功还是失败,.finally()
方法都会被执行。这个方法可以用来清理资源或者执行一些必须的操作。
另外,在 ES9 中,Promise 对象还引入了 Promise.allSettled()
方法。这个方法可以接受一个 Promise 数组作为参数,返回一个新的 Promise 对象。这个新的 Promise 对象在所有的 Promise 都执行完毕后才会被 resolve,返回一个所有 Promise 的状态的数组。例如:
// javascriptcn.com 代码示例 const promises = [ Promise.resolve(1), Promise.reject(new Error('Network error')), Promise.resolve(3) ]; Promise.allSettled(promises) .then(results => console.log(results)) .catch(error => console.error(error));
在上面的例子中,我们创建了一个包含三个 Promise 对象的数组。第二个 Promise 对象会被 reject,但是我们使用了 Promise.allSettled()
方法,所以即使其中有一个 Promise 失败了,它也会在所有的 Promise 都执行完毕后被 resolve。
总结
在 ES9 中,Promise 对错误处理提供了更多的帮助。我们可以使用 .finally()
方法来清理资源或者执行一些必须的操作,使用 Promise.allSettled()
方法来处理多个 Promise 对象的状态。这些新的方法可以帮助我们更好地处理异步操作的结果,提高代码的可靠性和可维护性。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65646d22d2f5e1655dde0333