📅  最后修改于: 2023-12-03 14:45:40.338000             🧑  作者: Mango
Promise 是一种用于管理异步操作的 JavaScript 对象。它解决了回调地狱(callback hell)的问题,通过提供一种更加可信赖和可组合的方式处理异步代码。
Promise 提供了一个容器来保存一个异步操作的结果。它有三种状态:
Promise 提供了 .then()
方法和 .catch()
方法来处理 Promise 对象所包含的值或错误。
// 创建一个 Promise 对象
const promise = new Promise((resolve, reject) => {
// 进行异步操作
setTimeout(() => {
const value = 42;
resolve(value); // 操作成功,返回值
// 或者
reject(new Error('操作失败')); // 操作失败,返回错误对象
}, 2000);
});
// 处理 Promise 对象的结果
promise
.then(value => {
console.log(`操作成功,结果为 ${value}`);
})
.catch(error => {
console.error(`操作失败,发生错误: ${error.message}`);
});
.then()
方法,保持代码的可读性和可维护性。.catch()
方法来处理异步操作中的错误,并避免程序崩溃。function getUser(userId) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (userId === 1) {
resolve({ id: 1, name: 'John' });
} else {
reject(new Error('用户不存在'));
}
}, 1000);
});
}
function getPosts(user) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (user.id === 1) {
const posts = [{ id: 1, title: 'Post 1' }, { id: 2, title: 'Post 2' }];
resolve(posts);
} else {
reject(new Error('无法获取帖子'));
}
}, 1500);
});
}
getUser(1)
.then(user => getPosts(user))
.then(posts => console.log(posts))
.catch(error => console.error(error.message));
const promise1 = new Promise((resolve) => {
setTimeout(() => {
resolve('Promise 1');
}, 1000);
});
const promise2 = new Promise((resolve) => {
setTimeout(() => {
resolve('Promise 2');
}, 2000);
});
const promise3 = new Promise((resolve) => {
setTimeout(() => {
resolve('Promise 3');
}, 1500);
});
Promise.all([promise1, promise2, promise3])
.then(values => console.log(values))
.catch(error => console.error(error));
Promise 可以广泛应用于以下场景:
Promise 是 JavaScript 异步编程中一个非常重要的概念和工具,它解决了回调地狱问题,并提供了更好的可组合性和错误处理。掌握 Promise 可以帮助程序员更好地处理异步代码,提高代码的质量和可维护性。