美文网首页
异步函数处理解决方案

异步函数处理解决方案

作者: cj_jax | 来源:发表于2019-01-04 23:37 被阅读0次

    Promise

    什么是promise

    axios是基于promise实现的,例如axios.get返回的就是一个promise的对象,所以能够调用.then方法

    概述

    promise是解决js中异步编程的完美解决方案

    背景

    没有promise之前,实现异步的做法:使用回调函数
    

    使用回调函数产生的问题
    回调地狱

    • 1 回调嵌套回调,看起来很丑(可读性差)
    • 2 异步体现不直观(代码执行顺序与正常思维顺序不一致)
    • 3 再解决复杂异步问题时,就变的很棘手
      使用promise解决回调函数的问题
    • 1 可读性更好,不用层层回调嵌套了
    • 2 看起来更加直观,因为:使用 Promise 就是以一种同步的方式来编写异步代码
    • 3 很容易解决复杂的异步问题

    promise的使用

    • 1 Promise 是一个构造函数
    • 2 可以将 Promise 看作一个容器,内部封装了异步操作
    • 3 Promise的参数是一个回调函数
    • 4 回调函数有两个参数:
      resolve
      表示成功的回调函数,也就是:当异步操作执行成功时,应该调用这个函数
      reject
      表示失败的回调函数,也就是:当异步操作执行失败时,应该调用这个函数
    • 5.说明
      then表示成功,当异步操作成功时,这个回调函数就会调用
      理解:Promise内部调用的 resolve 相当于就是调用了then中的回调函数,并且,如果 resolve 调用的时候传递了参数,还可以通过 then 中的回调函数来获取到这个参数
      catch表示失败,当异步失败时,这个回调函数会被调用
      注意
    • 1.错误被 catch 捕获后,后面的 catch 就不会再执行了
    • 2..then后面也可以指定第二个回调函数,当异步操作失败时,第二个回调函数的代码就会执行了

    promise的状态转换

    三种状态

    pending
    等待中
    resolved
    成功
    rejected
    失败
    默认的状态是 pending
    调用成功的回调函数
    pending-->resolved
    调用失败的回调函数
    pending-->rejected
    注意点
    状态只能改变一次,也就是说:只要状态发生改变了,就不会再次发生改变

    promise的几个常用的方法

    需求1

    有三个异步请求,等到这三个异步请求都完成的时候,再执行某个操作
      Promise
        .all([p1, p2, p3])
        .then(res => {})
    

    需求2

    有三个异步请求,只要这三个异步请求中有一个完成了,就执行某个操作
    Promise
    .race([p1, p2, p3])
    .then(res => {})

    async和await

    js中的异步编程的终极解决方案

    依赖性

    这两个关键字用来实现异步编程,是依赖于 Promise 的
    

    注意点

    • 1 await 只能用在 async 函数中!!!
    • 2 添加 async 的规则是:就近原则,一定要加载使用 await 关键字的函数中

    说明

    async

    就是用来修饰这个函数,也就是告诉JS解析引擎这个函数中包含了 await 这样的关键字处理的 异步操作

    await

    会等到后面的异步操作完成。异步操作完成后,后面的代码才会执行
    后面可以跟任意的表达式,但是,一般都会跟着一个 promise 对象,也就是一个异步操作

    相关文章

      网友评论

          本文标题:异步函数处理解决方案

          本文链接:https://www.haomeiwen.com/subject/ogplrqtx.html