Promise和async-await

Promise和async-await

Promise ——解决回调地狱,提供链式调用
  • 回调函数

    • 单个异步请求
    • 多个异步请求相互依赖 —— 回调地狱
    • 存在问题
      • 不利于阅读维护
      • 异步操作顺序变更时,需要大规模代码重构
      • 回调函数大多是匿名函数,bug追踪困难
  • Promise含义 —— 用于异步操作,表示尚未完成且预计在未来完成的异步操作

  • 优势

    • 将异步操作以同步操作的流程表示,利于阅读维护
    • 数据请求数据处理明确分开,掌握控制权
  • 状态

    • pending:初始值
    • fulfilled:操作成功
    • rejected:操作失败
    • 状态转换:只有 等待—>完成,等待—>拒绝
  • Promise构造器

    • Promise是一个构造函数,new Promise 返回promise实例对象

    • 接收executor函数作为参数,executor函数两个函数类型形参 resolve,reject

    • Promise构造函数执行时立即调用执行executor函数(同步任务)

      • new Promise(function(resolve,reject){
        	/*executor*/
        })
        
      • 调用resolve成功,pending—>resolve

      • 调用失败,pending—>rejected

      • resolve 或 reject 只有第一次执行有效,多次调用没有任何作用

  • Promise封装异步操作

    • 在回调函数中针对不同的返回结果,调用resolve或reject
    • 异步操作成功调用resolve函数,将返回值作为参数传递到外部
    • 操作失败调用reject函数,将错误信息作为参数传递到外部
  • Promise异步操作结果处理

    • then方法 —— 异步执行

      • resolve(成功) onFulfilled 会被调用,onFulfilled 是用来接收 promise 成功的值
      • reject(失败) onRejected 会被调用,onRejected 是用来接收 promise 失败的原因
      • 调用返回的promise对象保持当前状态,除非新创建
      • promise 状态一旦改变则不能再变
    • catch方法 —— 异步执行

      • 在链式写法中可以捕获 then 中发送的异常

      • 写法

        • promise.then(onFulfilled,onRrejected);
          promise.then(onFulfilled).catch(onRrejected);
          
    • finally方法

      • finally()返回一个Promise
      • 成功失败都会执行
  • 任务队列分类

    • 宏任务 —— ajax,setTimeout,setInterval,异步IO操作,…
    • 微任务 —— Promise.then catch finally
    • 宏/微任务执行顺序
      • 执行一个宏任务遇到微任务,添加到微任务队列,一个宏任务执行完毕后,立即执行当前微任务队列中所有微任务(循环该过程知道任务队列为空)
  • 静态方法

    • Promise.resolve() —— 返回一个状态为 resolved 的Promise对象
    • Promise.reject() —— 返回一个状态为 reject 的Promise对象
    • Promise.all()
      • 将多个 Promise 对象组成的数组包装成一个 Promise 对象
      • 数组中 Promise 的状态全部变为 resolved,all 方法返回状态为 resolved
      • 数组中 Promise 的状态一个为 reject,all 方法返回状态为 reject
    • Promise.race()
      • 接收Promise数组,返回新的Promise
      • 返回状态由率先完成的Promise的状态决定
async/await —— 包装Promise对象(语法糖)
  • async —— 写在函数前面的关键字,表示内部有异步操作
  • await —— 写在函数内部,后面是Promise对象,返回该对象结果,不是返回对应值,await返回后,async函数内后续代码才能执行
fetch —— 异步网络请求
  • fetch
    • 返回Promise实例
    • 通过.then接收响应结果
  • fetch发起GET请求
    • fetch不传递选项时,默认发起GET请求
    • 可以明确指定发送GET请求
    • 调用形式 :fetch(url,options)
      • url 是一个字符串,options是object类型
  • fetch发起POST请求
    • fetch发起非GET请求时,必须指明method
  • fetch响应结果包含的数据(请求结果res包含的属性)
    • headers 类型为object,包括响应的头信息
    • ok 类型为boolean,请求是否成功
    • status 类型为number,响应状态码
    • statusText 类型为string,响应状态码对应的文本描述
    • text 函数,返回数据的文本格式
    • blob 函数,返回数据的原始二进制流
    • json 函数,对数据进行JSON.parse后返回,若返回格式不是合法的JSON格式,会报错。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值