简单介绍一下 js 的 promise
时间: 2023-03-30 12:03:52 浏览: 58
JS 的 Promise 是一种异步编程的解决方案,它可以将异步操作以同步的方式表达出来,避免了回调地狱的问题。Promise 对象有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败),可以通过 then() 方法来获取异步操作的结果或者捕获异常。Promise 还支持链式调用,可以通过 then() 方法返回一个新的 Promise 对象,实现多个异步操作的串行执行。
相关问题
js手写简单的promise
以下是一个简单的JS手写Promise的例子:
```javascript
class MyPromise {
constructor(executor) {
this.status = 'pending'; // 初始状态为pending
this.value = undefined; // 成功时的返回值
this.reason = undefined; // 失败时的原因
const resolve = (value) => {
if (this.status === 'pending') {
this.status = 'fulfilled';
this.value = value;
}
};
const reject = (reason) => {
if (this.status === 'pending') {
this.status = 'rejected';
this.reason = reason;
}
};
try {
executor(resolve, reject);
} catch (error) {
reject(error);
}
}
then(onFulfilled, onRejected) {
onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : (value) => value;
onRejected = typeof onRejected === 'function' ? onRejected : (reason) => { throw reason };
if (this.status === 'fulfilled') {
return new MyPromise((resolve, reject) => {
try {
const x = onFulfilled(this.value);
if (x instanceof MyPromise) {
x.then(resolve, reject);
} else {
resolve(x);
}
} catch (error) {
reject(error);
}
});
}
if (this.status === 'rejected') {
return new MyPromise((resolve, reject) => {
try {
const x = onRejected(this.reason);
if (x instanceof MyPromise) {
x.then(resolve, reject);
} else {
resolve(x);
}
} catch (error) {
reject(error);
}
});
}
if (this.status === 'pending') {
return new MyPromise((resolve, reject) => {
this.onFulfilledCallbacks.push(() => {
try {
const x = onFulfilled(this.value);
if (x instanceof MyPromise) {
x.then(resolve, reject);
} else {
resolve(x);
}
} catch (error) {
reject(error);
}
});
this.onRejectedCallbacks.push(() => {
try {
const x = onRejected(this.reason);
if (x instanceof MyPromise) {
x.then(resolve, reject);
} else {
resolve(x);
}
} catch (error) {
reject(error);
}
});
});
}
}
catch(onRejected) {
return this.then(null, onRejected);
}
}
```
js Promise
JavaScript中的Promise是一种用于处理异步操作的对象。它代表了一个可能会在未来完成或失败的操作,并允许我们以一种更具可读性和可维护性的方式编写异步代码。
通过Promise,我们可以执行一些异步操作,并在操作完成后执行相应的操作,例如处理结果或错误。它有三个状态:pending(进行中)、fulfilled(已完成)和rejected(已失败)。当一个Promise处于pending状态时,我们可以通过调用resolve函数将其标记为fulfilled状态,或者调用reject函数将其标记为rejected状态。
使用Promise可以链式地组合多个异步操作,这样可以更好地处理回调地狱(callback hell)问题。我们可以使用Promise的then()方法来处理操作成功的情况,使用catch()方法来处理操作失败的情况。另外,我们还可以使用Promise.all()方法来同时处理多个Promise对象,当所有的Promise都成功完成时,它才会被解析。
下面是一个简单的示例代码,展示了如何使用Promise进行异步操作:
```javascript
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const data = 'Some data';
if (data) {
resolve(data); // 操作成功
} else {
reject('Error'); // 操作失败
}
}, 2000);
});
}
fetchData()
.then(data => {
console.log('Success:', data);
})
.catch(error => {
console.log('Error:', error);
});
```
在上面的示例中,fetchData函数返回一个Promise对象。在异步操作完成后,我们调用resolve函数将Promise标记为fulfilled状态,并传递操作的结果;或者调用reject函数将Promise标记为rejected状态,并传递错误信息。
在调用fetchData函数后,我们使用then()方法来处理操作成功的情况,即Promise被解析时的回调函数。使用catch()方法来处理操作失败的情况,即Promise被拒绝时的回调函数。
希望这能解答你关于JavaScript中Promise的问题!如果还有其他问题,请随时提问。