美文网首页
Promise笔记

Promise笔记

作者: 寒东设计师 | 来源:发表于2018-01-14 13:42 被阅读0次

    基本API

    1. Promise.resolve()

    2. Promise.reject()

    3. Promise.prototype.then()

    4. Promise.prototype.catch()

    5. Promise.all()

    6. Promise.race()

    介绍

    Promise的构造函数接受一个参数,是函数,并且传入两个参数,resolve是将Promise的状态置为fullfiled,reject是将Promise状态置为rejected。

    ```

    var promise = new Promise(reslove,reject){

        if(...){

            reslove(data)

        }else{

            reject(errorMsg)

        }

    }

    ```

    then和catch

    then可以实现Promise的连续调用,catch作用相当与then方法的第二个参数,同时它能捕获异常并保证程序继续执行。

    ````

    promise.then(function(response){

        //...

    },function(reason,errorMsg){

        //...

    })

    .catch(function(reason){

        //...

    })

    ````

    all和race

    all方法为所有的Promise执行完成之后的回掉,接收一个数组,并在resolve中返回一个数组。

    race用法同all,race为竞速执行,只要有一个,以下为api的使用方法和简单的原理实现

    ```

    var promiseAll = new Promise()

    promiseALl.all([promise1,promise2,promise3])

    .then(function(results){

        //...

    })

    promiseAll.race([]promise1,promise2,promise3)

    .then(function(results){

        //...

    })

    ```

    实现原理:

    ```

    Promise.all=function(promises){

        return  new Promise(function(resolve,reject){

            let  done=gen(promises.length,resolve);

            for(leti=0;i<promises.length;i++){

                promises[i].then(function(data){

                    done(i,data);

                },reject);

            }

        });

    }

    Promise.race=function(promises){

        return  new  Promise(function(resolve,reject){

            for(leti=0;i<promises.length){

                promises[i].then(resolve,reject);

            }

        });

    }

    ```

    相关文章

      网友评论

          本文标题:Promise笔记

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