• ES6学习笔记(四):异步操作


    Promise

    Promise三种状态

    pending、resolved、rejected

    使用语法

    var promis = new Promise(function(resolve,reject){
      $.ajax({
        url:'/api/something.json',
        method:'get',
        datatype:'json',
        success:(res) =>{
          resolve(res)
        },
        error:(err)=>{
          reject(err)
        }
      })
    })
    
    promis.then(function(res){
      console.log(res)
    }).catch(function(err){
      console.log(err)
    });
    

    Promise.prototype.then()

    链式调用,状态变为resolve
    如果把下一步想要的东西return出去,即可让下一个then使用

    var promise = new Promise(function(resolve,reject){
      $.ajax({
        url:'/api/poisearch.json',
        method:'get',
        datatype:'json',
        success:(res) =>{
          resolve(res)
        },
        error:(err)=>{
          reject(err)
        }
      })
    })
    
    promise.then(function(res){
      return res.data
    }).then(function(data){
      return data.result;
    }).then(function(result){
      console.log(result)
    });
    

    上面的代码还可以借用箭头函数简写成,极大提升了代码的简洁性和可读性

    promise.then(res => res.data)
      .then(data => data.result)
      .then(result => console.log(result));
    

    Promise.prototype.catch()

    如果异步操作抛出错误,状态就会变为Rejected,就会调用catch方法指定的回调函数,处理这个错误。

    1. 另外,then方法指定的回调函数,如果运行中抛出错误,也会被catch方法捕获。
    2. 如果Promise状态已经变成Resolved,再抛出错误是无效的。
    3. catch方法返回的还是一个Promise对象,因此后面还可以接着调用then方法。

    Promise.all()

    多个Promise实例,包装成1个,有点类似Array.prototype.every()
    用法:

    var p = Promise.all([p1, p2, p3]);
    
    1. 只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
    2. 只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

    Promise.race()

    多个Promise实例,包装成1个,有点类似Array.prototype.some()

    1. p1、p2、p3其中一个状态变成fulfilled,p的状态就会变成fulfilled
    2. 那个率先改变的Promise实例的返回值,就传递给p的回调函数。

    done()、finally()

  • 相关阅读:
    BPM平台在企业业务系统中使用的价值讨论
    零售餐饮行业的信息化建设
    LINQ 与Oracle应用 :转帖
    k2之于.NET流程应用开发者
    利用xslt导出复杂样式的excel,支持多个worksheet
    利用偏移量快速定位数据内容
    简单天气项目中观察者模式解析
    作业3:基于墨刀的:视频剪辑软件原型设计
    必做作业2:视频剪辑软件调研
    .Net Core项目依赖项问题
  • 原文地址:https://www.cnblogs.com/shuiyi/p/5891175.html
Copyright © 2020-2023  润新知