zoukankan      html  css  js  c++  java
  • 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函数即可。

  • 相关阅读:
    彻底完全地被LINQ(2sql以及C#3.0里的一些语法)雷到了
    Windows界面设计标准
    对于大型公司项目平台选择j2ee的几层认识(四)
    用C#开发TUXEDO客户端
    提醒一下:XmlSerializer的效率比BinaryFormatter高!
    xml, oop, 云计算、web service,敏捷开发
    做了一个简单的DLINQ性能测试
    项目组的文档作风.
    RHEL 6和RHEL 7(CentOS 6和CentOS 7)恢复ROOT密码
    mysql修改root密码
  • 原文地址:https://www.cnblogs.com/0314dxj/p/11942637.html
Copyright © 2011-2022 走看看