promise解析

概念

①promise是异步编程的一种解决方案,最典型的就是网络请求

②封装一网络请求的函数,不能立即拿到结果,我们又不能等网络请求数据,我们只能传入另一个函数,让他去请求数据,当前函数继续执行,当请求数据成功后再通过回调函数传回来

             

从上往下执行,当检测到需要进行网络请求的时候,因为js是单线程,如果直接跑去进行网络请求,则用户界面将看不到任何的页面渲染和反应,即阻塞,所以每当有网络请求的时候,都会额外分出异步任务,既保证了网络请求,也保证了与用户的交互,最后当网络请求完成就把数据回调当前位置

③promise在有异步操作时使用,使用promise对这个异步操作进行封装

④promise会让异步操作变得优雅,结构清晰,逻辑清晰,不会陷入异步地狱

⑤即把嵌套编程改为链式编程,每个异步函数都封装promise

来看一个例子

有这样一个异步操作,我们对他进行封装

resolve和reject都是函数

但如果有多个网络请求按照我们之前的做法,下面只是3个,如果更多呢,这就陷入了回调地狱

我们采用promise对上面的代码进行优化

①resolve是必须得有的,相当于允许你往下继续执行,接着调用then()

②虽然我们的代码是变多了,但是逻辑会变得很清晰,每一次网络请求内容和结构都可以很清晰的看出来,不会连括号谁对谁都不知道,你细品

除了resolve还有reject,看例子

调用resolve()返回成功,调用reject返回失败

链式编程

我们有这样一个需求,有字符串aaa,后面追加上111

即给resolve传递一个参数‘aaa’,然后将这个参数res传递给第二个promise的rosolve,加上对应的值再输出

我们可以把上面的代码进行优化,即直接调用promise的resolve

我们可以把上面的代码再进行优化,即省略掉new promise,直接返回值

如果中间出现了错误,我们只需要在对应位置调用promise的reject再catch获取即可

以上就是链式编程

下面补充一点,promise的3种状态

①pendind:等待状态,正在网络请求或者时间还没到

②fulfill:满足状态,当主动回调resolve时,就处于该状态并且回调then

③reject:拒绝状态,主动回调reject时,并且回调catch

promise的All方法

概念:当须要有2个异步事件及以上需要同时完成才能进行下一步时,可使用Promise.all([]),返回数组对象

看例子

返回数组即两个异步请求请求到的数据

 

 

以上就是promise的内容

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值