Promise

作者: 1baibai | 来源:发表于2020-05-06 22:46 被阅读0次

    1.什么是promise?

    promise是ES6种新增的异步编程解决方案,在代码中的表现是一个对象;

    2. 语法:

    ```

    newPromise(function(resolve,reject){...}/* executor */);

    ```

    promise对象不是异步的,只要创建promise对象就会立即执行存放的代码

    3.promise是如何通过同步的流程来表示异步的操作的?

    promise对象是通过状态的改变来实现的,只要状态发生改变就会自动触发对应的函数。

    4.Promise对象的三种状态:

    1. pending:默认状态,只要没有告诉promise任务是成功还是失败就是pending状态;

    2. fulfilled(resolved):只要调用resolve函数,状态就会变为fulfilled,表示操作成功;

    3. rejected: 只要调用rejected函数,状态就会变为rejected,表示操作失败;

    注意点:状态一旦改变就不可逆,既从pending变为fulfilled,那么永远都是fulfilled;既从pending变为rejected,那么永远都是rejected;

    5.then方法

    - 可以通过上一个promise对象的then方法给下一个promise对象的then方法传递参数;

    注意点:无论是在上一个promise对象成功的回调还是失败的回调传递的参数,都会传递给下一个promise对象成功的回调;

    - 如果then方法返回的是一个Promise对象,那么会将返回的Promise对象的执行结果中的值传递给下一个then方法;

    6.catch方法

    catch其实是`then(undefined,()=> {})`的语法糖

    注意点:如果不是用链式编程,那么会导致代码报错,原因如下:

    - 如果promise的状态是失败,那么是没有对应失败的监听就会报错;

    - then方法返回一个新的promise,新的promise会继承原有的promise的状态;

    - 如果新的promise的状态是失败,但是没有对应失败的监听也会报错;

    7.Promise的All静态方法

    1. all方法接受一个数组

    2. 如果数组中有多个Promise对象,只有都成功才会执行then方法,并且会按照添加的顺序,将所有成功的结果打包到一个新的数组中返回

    3. 如果数组中不是promise对象,那么会直接执行then方法

    应用场景:批量加载,要么一起成功,要么一起失败

    8.Promise的race静态方法

    1. all方法接受一个数组;

    2. 如果数组中有多个Promise对象,谁先返回就听谁的,后返回的会被抛弃;

    3. 如果数组中不是Promise对象,那么会直接执行then方法;

    应用场景:接口调试,超时处理

    相关文章

      网友评论

          本文标题:Promise

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