总结:
创建一个 `Promise` 的基本语法如下:
```js
const myPromise = new Promise((resolve, reject) => {
// 异步操作,可以是网络请求、文件读取、定时器等
// 如果成功,调用 resolve 并传递结果
// 如果失败,调用 reject 并传递错误原因
});
- 1.
Promise是类 无需考虑兼容性
- 2.当
new Promise的时候 会传入一个执行器executor此执行器是立即执行,是同步的。
- 3.当前
executor给了两个函数参数(resolve,reject) 描述当前promise的状态
- 4.
promise中有三个状态 等待 成功 失败
-
默认为等待
-
如果调用
resolve会走到成功 -
如果调用
reject或者发生异常 会走失败
- 5.每个
promise实例都有一个then方法
- 6.
promise一旦状态变化后不能更改
promise 中文意思是承诺,作为打工人,我们不可避免地会接到各种饼,比如口头吹捧的饼、升职加薪的饼、股权激励的饼......,有些饼马上就兑现了,比如口头褒奖,因为它本身没有给企业带来什么成本;有些饼却关乎企业实际利益,它们可能未来可期,也可能猴年马月,或是无疾而终,又或者直接宣告画饼失败。画饼这个动作,于Javascript而言,就是创建一个Promise实例:
Promise是一个对象,接受参数executor(执行器);
const bing = new Promise((resolve, reject) => {
// 祝各位的饼都能圆满成功
if ('画饼成功')
{
resolve('大家happy')
} else {
reject('有难同当')
}
})
Promise 是 JavaScript 中用于处理异步操作的对象。它提供了一种更结构化和可控的方式来处理异步操作,避免了回调地狱(callback hell)问题,并让异步代码更容易理解和维护。
一个 Promise 可以处于以下三种状态之一:
- Pending(进行中) :初始状态,表示异步操作尚未完成,画好的饼既没有被兑现,也没有被拒绝。
- Fulfilled(已完成) :表示异步操作已成功完成,并且会提供一个结果值,画的饼真的实现了。
- Rejected(已拒绝) :表示异步操作失败,并且会提供一个错误原因,画的饼实现失败了。
订阅:有人画饼,自然有人接饼。所谓“接饼”,就是对于这张饼的可能性做下设想。如果饼真的实现了,鄙人将别墅靠海;如果饼失败了,本打工仔以泪洗面。
转换成Promise中的概念,这是一种订阅的模式,成功和失败的情况我们都要订阅,并作出反应。订阅是通过
then,catch等方法实现的。
// 通过then方法进行订阅
bing.then(
// 对画饼成功的情况作出反应
success => {
console.log('别墅靠海')
},
// 对画饼失败的情况作出反应
fail => {
console.log('以泪洗面...')
}
)
链式传播:老板可以给高层或领导们画饼,而领导们拿着老板画的饼,也必须给底下员工继续画饼,让打工人们鸡血不停,这样大家的饼才都有可能兑现。这种自上而下发饼的行为与Promise的链式调用在思路上不谋而合。
bossBing.then(
success => {
// leader接过boss的饼,继续往下面发饼
return leaderBing
}
).then(
success => {
console.log('leader画的饼真的实现了,别墅靠海')
},
fail => {
console.log('leader画的饼炸了,以泪洗面...')
}
)
// 创建一个模拟异步操作的 Promise
const myPromise = new Promise((resolve, reject) => {
setTimeout(() => {
const randomNumber = Math.random();
if (randomNumber < 0.5) {
// 模拟成功,返回随机数
resolve(randomNumber);
} else {
// 模拟失败,返回错误消息
reject("操作失败");
}
}, 1000);
});
// 使用 Promise 的 then 方法来处理成功情况
myPromise.then((result) => {
console.log("成功:", result);
}).catch((error) => {
console.error("失败:", error);
});
在上述示例中,我们创建了一个 Promise 对象,模拟了一个异步操作,在操作成功时调用 resolve 并传递结果,在操作失败时调用 reject 并传递错误原因。然后,我们使用 then 方法来处理成功情况,使用 catch 方法来处理失败情况。
Promise 的主要优点是它提供了一种更清晰和可管理的方式来处理异步代码,可以串联多个异步操作,使代码更具可读性和可维护性。它在现代 JavaScript 开发中被广泛使用,特别是在处理网络请求和异步数据加载时。