从小白的视角理解promise

最近在面试,经常被问到对Promise的理解,这篇随笔的目的是对整体的思路进行梳理。如果有理解偏差的地方希望各位大佬不吝赐教~

Promise

  Promise是一种异步编程的解决方案,它一共有三种状态:pending(等待)、fulfilled(完成)、以及rejected(失败)。

  Promise的状态改变是不可逆的。

  Promise的写法:

1
2
3
4
5
6
7
const promise = new Promise((resolve,reject)=>{<br>  //这里写的是一段操作代码
  if(){   //如果一切正常
    resolve(value); //调用resolve函数,状态由pending->fulfilled, value将以参数的形式进入到then()
  }else{
    reject(error); //调用reject函数,状态由pending->rejected,错误信息将会以参数的形式进入到catch()
  }
}).then(res=>{  <br>  ...<br>}).catch(err=>{ <br>  ...<br>})

 这里举个例子!

↓↓成功案例

  

成功判断num=2为true,于是调用了resolve函数,字符串作为参数变成了then中的res。

---------------------------------------------------------------

↓↓失败案例

由于我设置了延迟执行,所以此时num并不是2,调用了reject函数,错误信息就直接传递到了catch中。

---------------------------------------------------------------

 错误信息除了可以用.catch()处理之外,还可以在.then()中处理,只需要在then中再写一个函数!

 

---------------------------------------------------------------

 

 

promise.all()

所有函数执行完成,以数组的形式返回结果

 

 只有当所有promise都是成功的时候,才能从res中拿到结果数组!

---------------------------------------------------------------

否则↓↓↓

只会返回失败的那个!

---------------------------------------------------------------

如果有两个失败的会返回什么呢!

依然只返回了p2的错误信息!

---------------------------------------------------------------

如果给p2加一个延迟。。。

明明是三个人的电影,p3终于拥有了姓名!!!

---------------------------------------------------------------

 总结一下,在使用Promise.all的时候,如果全部成功,结果将以数组的形式返回;如果有失败,那么将返回第一个执行失败函数的错误信息!

下面附上MDN关于Promise.all()的说明:

-------------------------------------------------------------------------------

 

promise.race()

p1p2p3的速度角逐!

还是刚刚这三位小兄弟

使用race时,执行速度最快的函数将有资格被返回!

---------------------------------------------------------------

如果我调换他们的位置,

 输出了P3的结果!

---------------------------------------------------------------

继续贴MDN

-------------------------------------------------------------------------------

七夕快乐!!

 

posted @   兔咂  阅读(44)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示