简介:本文将介绍 JavaScript 中的 Promise 对象,特别是 New Promise() 的基本概念、用法和常见问题。
在 JavaScript 中,Promise 是一个代表异步操作最终完成或失败的对象。它允许你以一种同步的方式编写异步代码,从而提高代码的可读性和可维护性。Promise 有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。
New Promise() 是创建 Promise 对象的一种方式,它接受一个函数作为参数,该函数接受两个参数:resolve 和 reject。resolve 用于将 Promise 对象的状态设置为已成功,并传递结果值给 then 方法;reject 用于将 Promise 对象的状态设置为已失败,并传递错误原因给 catch 方法。
下面是一个简单的 New Promise() 的例子:
let promise = new Promise((resolve, reject) => {// 异步操作,比如网络请求setTimeout(() => {resolve('成功的结果'); // 异步操作成功,调用 resolve}, 1000);});promise.then(result => {console.log(result); // 输出:'成功的结果'}).catch(error => {console.log(error); // 不会执行});
在这个例子中,我们创建了一个新的 Promise 对象,并在异步操作(这里是一个延迟了1秒的 setTimeout)成功时调用 resolve 方法。然后,我们使用 then 方法处理成功的结果,使用 catch 方法处理失败的原因。由于我们的异步操作是成功的,所以 catch 方法不会被执行。
需要注意的是,Promise 只能被解析一次。一旦 Promise 的状态从 pending 变为 fulfilled 或 rejected,它就不会再改变状态。因此,如果你再次调用 resolve 或 reject 方法,它们将不会有任何效果。
另外,如果你想在 Promise 被解析或拒绝时执行一些操作(比如清理资源或报告错误),你可以使用 finally 方法。finally 方法接收一个函数作为参数,无论 Promise 的状态如何,这个函数都会被执行。
下面是一个使用 finally 方法的例子:
let promise = new Promise((resolve, reject) => {// 异步操作setTimeout(() => {\n