zoukankan      html  css  js  c++  java
  • 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()

  • 相关阅读:
    shell 数组遍历加引号和不加引号的区别?
    shell map数据结构的实现
    PyCharm 项目打开窗口设置为当前还是新开一个怎么办?
    python 模拟ssh 登录远程服务器
    python 字节码死磕
    docker相关内容
    Windows7安装 docker-compose的过程
    史上最简单的Docker入门教程
    MySQL触发器使用详解
    存储过程
  • 原文地址:https://www.cnblogs.com/shuiyi/p/5891175.html
Copyright © 2011-2022 走看看