美文网首页JS
Promise常用的方法

Promise常用的方法

作者: 沃德麻鸭 | 来源:发表于2021-10-15 12:59 被阅读0次

    一、什么是Promise?

    Promise是异步编程的一种解决方案,将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数,是为了解决异步处理回调地狱而产生的

    Promise构造函数是同步执行的,then 方法是异步执行的,所以Promise创建后里面的函数会立即执行,构造函数中的resolve和reject只有第一次执行有效,,也就是说Promise状态一旦改变就不能再变

    async函数返回一个Promise对象,可以使用then方法添加回调函数,函数内部使用await来表示异步,async函数只有从await向下才是异步的开始

    它有三个状态pedding:初始状态,既不代表成功也不代表失败

                             fulfilled:成功状态

                             rejected:失败的状态

    两个过程:pedding---->fulfilled、pedding---->rejected

    缺点:

    无法取消Promise,一旦新建它就会立即执行,无法中途取消。

    ②如果不设置回调函数,promise内部抛出的错误,不会反应到外部。

    ③当处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。

    二、Promies的静态方法

    1.Promise.resolve()函数被执行时, 会将promise的状态从 pending 改成 fulfilled 成功

    2.Promise.reject()函数被执行时, 会将promise的状态从pending 改成 rejected 失败

    new Promise((resolve, reject) => {

    reject()     //Promise.reject()---->  rejected 失败 

    //  resolve()  Promise.resolve()----->fulfilled 成功

    })

    3.Promise.all([promise1, promise2, promise3]) 等待原则, 是在所有promise都完成后执行, 可以用于处理一些并发的任务,如果Promise实例都进入Fulfilled状态,Promise.all返回的实例才会变成Fulfilled状态并将Promise实实例数组的所有返回值组成一个数组,传给Promise.all返回实例的回调函数;如果有某一个或者多个实例进入rejected状态,Promise.all返回的实例会立即变成Rejected状态并将第一个rejected的实例返回值传递给Promise.all返回实例的回调函数。

    应用场景

    4.Promise.race([promise1, promise2, promise3]) 赛跑, 竞速原则, 只要三个promise中有一个满足条件, 就会执行.then(用的较少),先执行到成功就返回成功的状态,返回失败就是失败状态

    三、Promise的实例方法

    1.Promise.then(),此方法接收两个参数onResolve和onReject,分别代表当前Promise对象的成功和失败

    2.Promise.catch(),当pedding变为rejected时会进入catch,来对错误进行处理

    四、reject和catch处理上有什么不同?

    ①reject是用来抛出异常,catch用来处理异常

    ②reject是Promise的方法,而catch是Promise实例的方法

    ③reject后面的东西一定会进入.then中的第二个回调,如果then中没有写第二个回调,则进入catch

    ④网络异常,会直接进入catch而不会进入then的第二个回调

    五、手写一个Promise

    //Promise构造函数的两个方法resolve,reject,分别代表成功和失败

    var Promise=new Promise((resolve,reject)=>{

    if(操作成功){

    resolve(value)

    }else{

    reject(error)

    )

    // .then第一个回调执行成功回调,第二个是失败回调

    Promise.then( function (value) {

    //成功 },function(value){

    //失败 } )

    相关文章

      网友评论

        本文标题:Promise常用的方法

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