从小白的视角理解promise

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

Promise

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

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

  Promise的写法:

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

 这里举个例子!

↓↓成功案例

  

成功判断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 @ 2021-08-14 17:59  兔咂  阅读(40)  评论(0编辑  收藏  举报