Skip to main content
 主页 > 创说公益 >

吴晴晴:Promise是什么鬼?

2020-11-07 22:05 浏览:

吴晴晴:Promise是什么鬼?

  用vue的时候ajax是用的axios封装,一直不知道为何有.then这样简洁明了的写法,

  方便的背后一直没有去深究其理,今天就来看看Promise

  总所周知js是单线程,导致JavaScript的所有网络操作,浏览器事件,都必须是异步执行。异步执行可以用回调函数实现,如经典的ajax,是这么玩的:

  用了异步是这样的:

  so:看看怎么封装Promise:

  在我看来Promise就是个语法糖,按照特定的写法进行解析而已:

  引用下廖雪峰官网的一句总结:

  来自廖雪峰官网

  玩个简单的比较傻逼的 promise game,看看Promise是怎么玩的,直接上代码:

  结果:

  start game:0

  test.html:5 current count: 1

  test.html:5 current count: 2

  test.html:5 current count: 3

  test.html:5 current count: 4

  test.html:5 current count: 5

  test.html:5 current count: 6

  test.html:32 hahahapromise game over

  catch 中执行rejcet回调

  所以: Promise对象就是参数中的resolve和reject两个参数分别放到then和catch中执行。而且和

  两个参数的名字没关系,参数名字可以写成res,rej都可以

  会在两个promise都执行完后才一起返回结果,应用场景是在同时两个异步请求完成需要计算的时候,代码运行结果:

  ["p1返回了2000", "p2返回了3000"]

  use:3s

  3s后数组形式返回两个异步函数的结果

  会返回先执行的一个函数,忽略掉剩下的函数,代码运行结果:

  p1返回了2000

  use:2s

  2s后返回p1的结果,忽略了p2

  写在结尾的:玩够了回调地狱,玩玩promise也不错