JavaScript 中的 Promise 是一种用于处理异步操作的对象。它代表了一个异步操作的最终完成(或失败)及其结果值。Promises 提供了一种更清晰和更强大的方式来处理异步代码,相比传统的回调函数模式。
Promise 的状态
一个 Promise 可以处于以下三种状态之一:
- pending (进行中):这是初始状态,既不是成功也不是失败。
- fulfilled (已兑现):表示操作成功完成。
- rejected (已拒绝):表示操作失败。
一旦 Promise 进入 fulfilled 或 rejected 状态,它就再也不会改变其状态。这个特性叫做不可变性(immutability),是 Promise 的一个重要特性。
创建 Promise
你可以使用 new Promise() 构造函数创建一个新的 Promise 对象,并传入一个执行器(executor)函数作为参数。执行器函数会立即被调用,并且接受两个参数:resolve 和 reject 函数。这两个函数用来将 Promise 的状态改为 fulfilled 或 rejected。
let myPromise = new Promise(function(resolve, reject) {
// 异步操作
if(/* 操作成功 */) {
resolve("Success"); // 将 Promise 状态改为 fulfilled
} else {
reject("Error"); // 将 Promise 状态改为 rejected
}
});
使用 Promise
你可以使用 .then() 方法来为 Promise 的 fulfilled 和 rejected 状态添加回调函数。.then() 接受两个可选的参数:第一个是当 Promise 被 fulfilled 时调用的函数;第二个是当 Promise 被 rejected 时调用的函数。
myPromise.then(
function(value) { console.log(value); }, // 当 Promise 成功时调用
function(error) { console.error(error); } // 当 Promise 失败时调用
);
你也可以使用 .catch() 来捕获任何在链中的 Promise 被 rejected 时发生的错误。
myPromise.catch(function(error) {
console.error('Caught error:', error);
});
Promise 链式调用
Promise 支持链式调用,这使得你可以将多个 .then() 方法链接在一起,每个 .then() 方法都可以返回一个新的 Promise,从而形成一个连续的异步操作流程。
myPromise
.then(function(result) {
// 执行一些操作...
return anotherPromise;
})
.then(function(newResult) {
// 上一个 then 返回的 Promise 完成后执行的操作
})
.catch(function(error) {
// 如果任何一个 Promise 被 rejected,则会触发这里的 catch
});
Promise.all() 和 Promise.race()
Promise.all(iterable)方法接收一个Promise对象的数组或其他可迭代对象,当所有的Promise都成功完成时,它返回一个新的Promise,并解析为一个包含所有结果的数组。如果有一个Promise失败了,那么它会立即返回失败的那个Promise的原因。Promise.race(iterable)方法同样接收一个Promise对象的数组或其他可迭代对象,但只要有一个Promise成功或失败,它就会立即返回那个Promise的结果。
这些方法可以让你更方便地管理多个并发的异步操作。
async/await
ES2017 引入了 async 和 await 关键字,它们让 Promise 的使用更加直观和简单,允许我们编写看起来像同步代码的异步代码。
async function asyncFunction() {
try {
let result = await myPromise;
console.log(result);
} catch (error) {
console.error(error);
}
}
2993

被折叠的 条评论
为什么被折叠?



