promise使用

Posted 0314dxj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了promise使用相关的知识,希望对你有一定的参考价值。

1.什么是promise?

  1.主要用于异步计算。

  2.可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果。

  3.可以再对象之间传递和操作promise,处理队列。

2.promise的作用

  为了避免页面冻结,不执行操作,可以异步操作,一时间可以执行多个事件!

  • 回调地狱,代码难以维护, 常常第一个的函数的输出是第二个函数的输入这种现象
  • promise可以支持多个并发的请求,获取并发请求中的数据
  • 这个promise可以解决异步的问题,本身不能说promise是异步的

3.Promise的创建。

  • 初始状态( pending )。
  • 已完成( fulfilled ): Promise 的异步操作已结束成功。
  • 已拒绝( rejected ): Promise 的异步操作未成功结束。

resolve 方法可以使 Promise 对象的状态改变成成功,同时传递一个参数用于后续成功后的操作。
reject 方法则是将 Promise 对象的状态改变为失败,同时将错误的信息传递到后续错误处理的操作。

// Promise实例的创建
let p = new Promise((resolve, reject) => {
  // TODO
})

但是这里有个缺陷,一旦被创建就会立即被执行,所以用药函数包裹起来。

let getPromise = () => {
  return new Promise((resolve, reject) => {
    // TODO  
    // 处理结果
    if (result) {
      resolve(successObject)
    } 
    else {
      reject(error)
    }
  })
}

常用方法:

  常用的方法就是then()和catch()这两个方法,通过then()的传递可以解决回调的问题。

  then可以接受两个参数,都是回调函数,第一个回调函数用来处理resolved状态,参数为Promise实例调用resolve传递的成功对象。第二回调函数用来处理rejected状态,参数为调用Promise实例调用reject传递的错误对象。

let getPromise = () => {
  return new Promise((resolve, reject) => { 
    // 处理结果
    if (result) {
      resolve(successObject)
    } 
    else {
      reject(error)
    }
  })
}

getPromise().then(res => { // 调用方法
    console.log(res)
  })
  .catch(err => {
    //错误执行时
  })

  也可以用then()继续返回一个promise对象,通过return一个新的promise,继续执行函数。

getPromise().then(res => {    //第一层Promise
    console.log(res)
    return getPromise()
    )
  .then(res => {    // 第二层Promise
    console.log(res)
  })
  .catch(err => {
    // 错误执行
  })

  使用 catch 的写法比一般的写法更加清晰明确。我们在捕获错误的时候,直接在最后写catch函数即可。

 

以上是关于promise使用的主要内容,如果未能解决你的问题,请参考以下文章

前端面试题之手写promise

澄清 node.js + promises 片段

什么时候然后从Promise.all()的子句运行?

Typescript编译器无法从Promise resolve调用中推断类型

前端片段整理

在javascript承诺中执行的顺序是什么