Promise
异步编程解决方案。
简介
Promise 是异步编程的一种解决方案,它代表了一个异步操作的最终结果。它是一个对象,代表着某个未来才会结束的事件(通常是一个耗时的操作),并提供了一个统一的接口,用于处理异步操作的成功和失败。Promise 提供了一种更合理的解决异步编程问题的方式。
Promise 有以下几个特点:
- 对象的状态:Promise 有三种状态:pending(进行中)、fulfilled(已成功)、rejected(已失败)。只有异步操作的结果,才会改变状态。
- 一旦状态改变,就不会再变,任何时候都可以得到这个结果。
- 链式调用:Promise 构造函数返回的是一个 Promise 对象,可以链式调用。
- 错误处理:Promise 对象会将错误信息传递给回调函数。
基本用法
javascript
const promise = new Promise((resolve, reject) => {
// 异步操作
setTimeout(() => {
resolve('success');
}, 2000);
});
promise.then(result => {
console.log(result);
}).catch(error => {
console.log(error);
});上面的代码中,我们使用 Promise 构造函数创建了一个异步操作,并传入两个回调函数,分别用于处理成功和失败的情况。在 setTimeout 函数中,我们模拟了一个异步操作,并在 2 秒后调用 resolve 函数,将 Promise 的状态从 pending 变为 fulfilled ,并将结果传递给回调函数。
然后,我们调用 then 方法,传入一个回调函数,用于处理成功的情况。如果异步操作成功,则会将结果作为参数传递给回调函数。如果异步操作失败,则会将错误信息作为参数传递给 catch 方法。
链式调用
Promise 构造函数返回的是一个 Promise 对象,可以链式调用。
javascript
const promise = new Promise((resolve, reject) => {
resolve('success');
});
promise.then(result => {
console.log(result);
return 'hello';
}).then(result => {
console.log(result);
});上面的代码中,我们创建了一个 Promise 对象,并在 then 方法中返回了一个字符串。由于 then 方法返回的是一个新的 Promise 对象,因此可以链式调用。
错误处理
Promise 对象会将错误信息传递给回调函数。
javascript
const promise = new Promise((resolve, reject) => {
throw new Error('error');
});
promise.then(result => {
console.log(result);
}).catch(error => {
console.log(error);
});上面的代码中,我们创建了一个 Promise 对象,并在构造函数中抛出了一个错误。由于 Promise 对象无法捕获错误,因此会将错误信息传递给 catch 方法。
