前端必备:从头开始,搞懂Promise之Promise基础

本文深入介绍了JavaScript中的Promise,包括其作为未来值的概念、Promise的状态及其不可变性、then()方法的使用以及链式Promise的处理原理。通过实例解析了每个then()方法如何处理最近的Promise对象,帮助读者建立对Promise的全面理解,是前端开发者掌握异步编程的重要参考资料。
摘要由CSDN通过智能技术生成

目录

未来值

Promise

Then()

链式Promise

1.每个then()都是一个Promise对象

2. 是否在promise中return

3. 每个then()会处理离自己最近的那个promise


未来值

设想场景:你去汉堡店买汉堡,购买人数很多,无法立刻拿到汉堡。

当你付款完成后,就发出了对某个值(这里就是汉堡)的请求。此时店员就会给你一个东西代替汉堡,通常是带有编号的收据,那么收据上的编号就是你核销汉堡的凭证,这个编号也代表了汉堡店给你的承诺(promise),即,未来会给你一个汉堡。

此时有了收据,就可以等待(等待态)了,在等待的途中,你可以做其他的事情。

但是汉堡依旧在你的大脑中,你不会等到汉堡送来时产生“为什么给我个汉堡?”等其它疑惑,所以当汉堡送来时,你就会直接处理这个值(汉堡)——把它吃掉。

此时这个在大脑中的汉堡,你也可以理解为即将得到的汉堡,是一个“未来值”,即占住了位置,但并没有拿到实物进行处理,反而你正在做其他事。

等待片刻后,叫到了你的号码,你可以去领汉堡了。

此时会发生3种情况。

  1. 核对编号成功,完成交易,拿到汉堡。即,我需要的值(汉堡),已经处理好了,我拿承诺值(商家给的编号)换取这个值本身(汉堡)。此时,未来值成功了(得到汉堡了),结果就是你就开始吃汉堡了,吃饱了。

  2. 核对编号成功,汉堡卖完了。值(汉堡)没了,未来值(即将得到汉堡)失败了(汉堡并没得到),结果是你可能会换一个地方吃或者干别的。

  3. 商家系统故障,你的号永远都没被叫到。现实中有现实中的处理办法,但在程序中,这是一种未决议状态

从上面的例子可以看出,核对编号到拿到/未拿到汉堡到最终是吃还是没吃的结果,这是一个完整的过程,重要的是最后的结果,是吃了还是没吃。

这基本诠释了使用Promise的整个流程,即Promise先决议,然后确定未来值的状态,有成功也有失败,成功后对应一种结果返回,失败后对应一种结果返回,且只会有一种结果被返回

未决议状态会放在之后讨论。

Promise

Promise:从语义上可以看出,它是一个承诺,承诺一段时间后给你反馈一个结果,从语法上,它是一个对象,使用new来创建,它会有三种状态,等待pending、成功resolve、失败rejecte,且一旦状态确定,就无法更改,此时它成了不变值

Promise创建的任务是微任务。

未决议状态会放在之后讨论,它不是主观触发的一种状态,而以上三种,是promise必备的状态。

此时你是否想到未来值,它也有成功/失败的状态。

所以说:Promise会很好的展现未来值的特性,是一种封装和组合未来值的易于复用的机制。

来看看Promise的使用语法。

let p1 = new Promise((resolve, reject) => {
      // resolve("成功");
         reject("拒绝");
        })

使用决议函数reject()表示失败(请求拒绝)。

使用决议函数resolve()表示成功。

注意,这里为了一次展示语法也为了代码能正常执行,我将resolve(“成功”)注释掉了,因为状态一旦确定就无法更改,如果没有注释,那意思就是,先成功,后又改为失败,这样是不行的,只能有一个状态存在,所以将其中一个注释掉。

使用new来创建的promsie是标准promise。

Promise内封装了“等待底层值的完成或拒绝”的状态,这个状态依赖于时间,所以是这个状态与时间有关,而promise本身与时间无关,可以得出:Promise可以按照可预测的方式进行组合,不用担心时序带来的变化或底层的结果。这可以避免很多传统异步的问题,之后我们会详细讨论。

同样的,Promise的状态不可更改会带来一些好处:

使用Promise决议过的值是不变值,外部无法进行更改,那么,将这个值传给第三方,或者多方进行观察,它就更加安全了,因为无法被修改。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值