欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > 深入理解 JavaScript 的 Promise:实例方法与静态方法

深入理解 JavaScript 的 Promise:实例方法与静态方法

2025/2/25 12:44:53 来源:https://blog.csdn.net/weixin_63726940/article/details/145453107  浏览:    关键词:深入理解 JavaScript 的 Promise:实例方法与静态方法

在 JavaScript 中,Promise 是处理异步操作的核心工具,它提供了方便的接口来管理异步任务的执行顺序。本文将介绍 Promise 的实例方法和静态方法,帮助你更好地理解和使用它。

一、Promise 的实例方法

Promise 的实例方法主要用于处理单个 Promise 实例的结果。这些方法帮助你在 Promise 完成后做进一步的操作。

1. then()

then() 方法是 Promise 的核心方法之一,它接受两个参数:一个用于处理成功结果的回调函数,一个用于处理错误的回调函数。then() 返回一个新的 Promise,因此可以链式调用。

let promise = new Promise((resolve, reject) => {let success = true;if (success) {resolve("Operation successful");} else {reject("Operation failed");}
});promise.then(result => {console.log(result); // "Operation successful"}).catch(error => {console.log(error); // 不会执行});
2. catch()

catch() 方法用于捕获 Promise 中发生的任何错误,它的作用相当于 .then(null, errorHandler)catch() 方法也会返回一个新的 Promise,可以继续链式调用。

let promise = new Promise((resolve, reject) => {reject("An error occurred");
});promise.catch(error => {console.log(error); // "An error occurred"});
3. finally()

finally() 方法在 Promise 完成时无论成功或失败都会执行。它通常用于清理操作,比如关闭加载指示器或重置状态。finally() 不会影响 Promise 的状态,且返回的 Promise 与原 Promise 的结果一致。

let promise = new Promise((resolve, reject) => {resolve("Operation complete");
});promise.finally(() => {console.log("Cleanup actions here");}).then(result => {console.log(result); // "Operation complete"});

二、Promise 的静态方法

除了实例方法,Promise 还提供了许多静态方法,这些方法帮助你执行一些常见的异步操作模式。

1. Promise.resolve()

Promise.resolve() 方法用于返回一个已解决的 Promise 对象。如果传入一个值,它会被自动包裹成一个 Promise;如果传入的是一个已有的 Promise,则会直接返回它。

let resolvedPromise = Promise.resolve(42);
resolvedPromise.then(value => {console.log(value); // 42
});
2. Promise.reject()

Promise.reject() 方法用于返回一个已拒绝的 Promise 对象,通常用于创建一个失败的 Promise

let rejectedPromise = Promise.reject("Something went wrong");
rejectedPromise.catch(error => {console.log(error); // "Something went wrong"
});
3. Promise.all()

Promise.all() 方法接受一个包含多个 Promise 的数组,并返回一个新的 Promise,该 Promise 在所有输入的 Promise 都成功时被解决,并返回一个包含所有成功结果的数组。如果其中任何一个 Promise 被拒绝,Promise.all() 返回的 Promise 会立即被拒绝。

let promise1 = Promise.resolve(1);
let promise2 = Promise.resolve(2);
let promise3 = Promise.resolve(3);Promise.all([promise1, promise2, promise3]).then(values => {console.log(values); // [1, 2, 3]
});

如果其中一个 Promise 失败,Promise.all() 会立即拒绝:

let promise1 = Promise.resolve(1);
let promise2 = Promise.reject("Error occurred");
let promise3 = Promise.resolve(3);Promise.all([promise1, promise2, promise3]).then(values => {console.log(values);}).catch(error => {console.log(error); // "Error occurred"});
4. Promise.allSettled()

Promise.allSettled() 方法也接受一个包含多个 Promise 的数组,但与 Promise.all() 不同,它会等待所有的 Promise 完成,无论是成功还是失败。它返回一个包含每个 Promise 状态(成功或失败)和对应值(或错误)的数组。

let promise1 = Promise.resolve(1);
let promise2 = Promise.reject("Error occurred");
let promise3 = Promise.resolve(3);Promise.allSettled([promise1, promise2, promise3]).then(results => {console.log(results);// [//   { status: 'fulfilled', value: 1 },//   { status: 'rejected', reason: 'Error occurred' },//   { status: 'fulfilled', value: 3 }// ]
});
5. Promise.race()

Promise.race() 方法接受一个包含多个 Promise 的数组,返回一个新的 Promise它会在第一个 Promise 完成时返回。无论该 Promise 是成功还是失败,Promise.race() 都会立即返回该结果。

let promise1 = new Promise(resolve => setTimeout(resolve, 100, "First"));
let promise2 = new Promise(resolve => setTimeout(resolve, 200, "Second"));Promise.race([promise1, promise2]).then(result => {console.log(result); // "First"
});
6. Promise.any()

Promise.any() 方法与 Promise.race() 类似,唯一的不同是,它只会在至少一个 Promise 成功时返回。如果所有的 Promise 都失败,Promise.any() 会返回一个失败的 Promise

let promise1 = new Promise((_, reject) => setTimeout(reject, 100, "Error"));
let promise2 = new Promise(resolve => setTimeout(resolve, 200, "Success"));Promise.any([promise1, promise2]).then(result => {console.log(result); // "Success"
}).catch(error => {console.log(error); // 如果所有 Promise 都失败,输出错误
});

三、总结

在 JavaScript 中,Promise 的实例方法和静态方法提供了强大的工具来管理异步任务。实例方法(如 then()catch()finally())允许我们对单个 Promise 实例的结果进行操作,而静态方法(如 Promise.resolve()Promise.all()Promise.race())则为常见的异步操作模式提供了方便的接口。掌握这些方法将帮助我们编写更高效、清晰和可维护的异步代码。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词