📅  最后修改于: 2023-12-03 14:50:57.994000             🧑  作者: Mango
JavaScript 中的 Promise 是一种很有用的异步编程模型,它可以帮助我们更好地处理异步代码,使得代码更加清晰和易读。
Promise 是一种代表了异步操作的最终结果的对象。它能够在异步操作完成后返回结果或错误。Promise 对象具有以下三种状态:
我们可以使用 Promise 来处理异步操作。比如,从服务器获取数据等等。Promise 可以链式调用,以避免回调地狱。
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Success!"); // 完成
}, 1000);
});
promise.then((result) => {
console.log(result); // Success!
}).catch((error) => {
console.log(error);
});
以上代码创建了一个 Promise 对象,1 秒后返回一个成功信息。该 Promise 对象返回了一个成功信息,再通过 .then()
方法来获取结果。
Promise 支持链式调用,如果我们在一个 Promise 中返回了另一个 Promise,那么后续的 Promise 将会等到前一个 Promise 完成后才会执行。我们可以通过 .then()
方法来继续处理 Promise 返回的结果。
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Success!");
}, 1000);
});
promise.then((result) => {
console.log(result); // Success!
return "Another Promise";
})
.then((result) => {
console.log(result); // Another Promise
})
.catch((error) => {
console.log(error);
});
其中第一个 .then()
返回了另一个 Promise 对象,第二个 .then()
将等到这个 Promise 完成后才会执行。
当 Promise 被拒绝时,我们可以使用 .catch()
进行错误处理。.catch()
方法接收一个回调函数,当 Promise 被拒绝时将执行该回调函数。
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
reject("Error!");
}, 1000);
});
promise.then((result) => {
console.log(result); // 不会执行
})
.catch((error) => {
console.log(error); // Error!
});
Promise.all() 方法可以用于等待多个 Promise 完成并返回它们的结果。当所有的 Promise 都完成时,它将以一个结果数组调用 .then()
方法。如果有任意一个 Promise 被拒绝了,则 .catch()
方法将会被调用。
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Promise 1");
}, 1000);
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Promise 2");
}, 2000);
});
const promise3 = new Promise((resolve, reject) => {
setTimeout(() => {
reject("Error");
}, 3000);
});
Promise.all([promise1, promise2, promise3])
.then((result) => {
console.log(result); // 不会执行
})
.catch((error) => {
console.log(error); // Error
});
Promise 可以帮助我们更好地处理异步代码,使得代码更加清晰和易读。我们可以使用 .then()
和 .catch()
来处理 Promise 返回的结果和错误信息。此外,我们可以使用 .all()
方法等待多个 Promise 完成并返回它们的结果。