关于promise的认识

1.不用纠结promise为什么是异步的问题,promise作为一个函数本身和同步异步没有什么关系,含有两个形参(resolve,reject),这两个形参都为函数,只是一般用来处理异步计算,它的作用是可以把异步的问题写的和同步一样。通过then()和catch()来解决异步处理问题,一般用于处理回调地狱问题。

Promise对象有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败),一旦状态改变,就不会再变。

2.为什么说promise可以解决回调函数的问题

因为promise在执行过程中一定会返回一个状态给你,Promise实现了链式调用,在每次调用then之后返回的都是一个Promise,并且是一个全新的Promise,原因也是因为状态不可变。如果你在then中使用了 return,那么 return 的值会被 Promise.resolve() 包装

因此,可以很好的解决回调地狱的问题。

回调地狱

ajax(url, () => {
    // 处理逻辑
    ajax(url1, () => {
        // 处理逻辑
        ajax(url2, () => {
            // 处理逻辑
        })
    })
})

可写为

ajax(url)
  .then(res => {
      console.log(res)
      return ajax(url1)
  }).then(res => {
      console.log(res)
      return ajax(url2)
  }).then(res => console.log(res))

将promise嵌套在函数里用return的方式返回,是为了防止promise立即执行

参考:https://es6.ruanyifeng.com/#docs/promise

 

 

posted @ 2019-11-08 09:46  lipu1993  阅读(138)  评论(0编辑  收藏  举报