在JavaScript中,Promise是一种处理异步操作的方式,它可以避免回调地狱,并提供了更加简洁和可读的代码结构。
使用Promise可以将异步操作封装为一个Promise对象,并在异步操作完成时触发resolve或reject回调函数。Promise对象有三个状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。
下面是一个使用Promise的例子:
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const data = "Hello, World!";
if (data) {
resolve(data);
} else {
reject("Error: Data not found");
}
}, 2000);
});
}
fetchData()
.then(data => {
console.log(data);
})
.catch(error => {
console.error(error);
});
在上面的例子中,fetchData函数返回一个Promise对象,在2秒后将会调用resolve回调函数,并提供数据。使用.then来处理异步操作成功的情况,.catch来处理异步操作失败的情况。
下面是一个手写Promise的简单示例:
class Promise {
constructor(executor) {
this.state = 'pending';
this.value = undefined;
this.reason = undefined;
const resolve = value => {
if (this.state === 'pending') {
this.state = 'fulfilled';
this.value = value;
}
};
const reject = reason => {
if (this.state === 'pending') {
this.state = 'rejected';
this.reason = reason;
}
};
try {
executor(resolve, reject);
} catch (error) {
reject(error);
}
}
then(onFulfilled, onRejected) {
if (this.state === 'fulfilled') {
onFulfilled(this.value);
} else if (this.state === 'rejected') {
onRejected(this.reason);
}
}
}
上面的示例只是一个简单的Promise实现,它只支持最基本的功能。实际上,Promise的实现还需要处理异步操作、链式调用、错误处理等更复杂的情况。