美文网首页
Promise基本用法

Promise基本用法

作者: kevin元 | 来源:发表于2019-01-25 17:26 被阅读0次

    ## promise概述

    - 基本语句 resolve,reject,then,catch

    - 三种状态:pending,fulfilled,rejected

    ---

    ### 基本用法

    - promise初始化

    ```

    var promise = new Promise(function(resolve,reject)

        resolve('test')

        reject('error')//或者下面这种

        throw 'error' //推荐

    );

    ```

    - then,catch用法

    ```

    promise.then(function(data) {

        console.log('success');

    }).catch(function(error) {

        console.log('error', error);

    });

    ```

    ---

    ### 不常用的方法

    - all用法

    ```

    var p = Promise.all([p1,p2,p3])

    ```

    概述:全部都是fulfilled,才执行then,一个是rejected就catch.

    **重点**

    执行顺序是按参数顺序,不是会回调顺序,并行执行

    - race用法

    代码同all,有一个状态改变就执行

    - 便捷用法

    ```

    Promise.resolve(value)

    Promise.reject(reason)

    ```

    ---

    ### 常见问题

    1. reject和catch区别

    ```

    var promise = new Promise(function (resolve, reject) {

        reject("333")

        resolve(x);

    });

    promise.then((value) => {

        console.log(value)

    }).catch((error) => {

    });

    // promise.then(function (data) {

    //    console.log(data)

    // }, function (error) {

    //    console.log(error)

    //    });

    ```

    **(待议)**

    then中的异常catch也能捕获,上文中第二种方式收不到resolve(x)的异常

    2. 如果在then中抛错,而没有对错误进行处理(即catch),那么会一直保持reject状态,直到catch了错误.

    ```

    function taskA() {

        console.log(x);

        console.log("Task A");

    }

    function taskB() {

        console.log("Task B");

    }

    function onRejected(error) {

        console.log("Catch Error: A or B", error);

    }

    function finalTask() {

        console.log("Final Task");

    }

    var promise = Promise.resolve();

    promise

        .then(taskA)

        .then(taskB)

        .catch(onRejected)

        .then(finalTask);

    -------output-------

    Catch Error: A or B,ReferenceError: x is not defined

    Final Task

    ```

    相关文章

      网友评论

          本文标题:Promise基本用法

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