美文网首页
ES6-promise

ES6-promise

作者: 梦幽辰 | 来源:发表于2019-12-31 11:31 被阅读0次

什么是promise

Promise 对象用于表示一个异步操作的最终状态(完成或失败)以及其返回的值

Promise 对象代表了未来将要发生的事件,用来传递异步操作的消息。

同步?异步?

同步任务会阻塞程序运行

异步任务不会阻塞程序执行

示例:

    function f() {
        return new Promise(resolve => {
            setTimeout(function () {
                resolve();
            }, 1000);
        })
    }

    f()
        .then(function () {
            console.log(1);
            return f();
        })
        .then(function () {
            console.log(2);
            return f();
        })
        .then(function () {
            console.log(3);
        })

Promise

信任问题

  1. 解决了回调地狱、信任问题;

  2. promise可以有效防止回调函数控制反转的问题,一旦被确定为成功或者失败,就不能再被更改

Promise.then(resolve, reject)

resolve 和 reject 都是异步的,没办法通过 try-catch 语句捕获错误

示例:

    function f(a) {
        return new Promise((resolve, reject) => {
            if(a){
                resolve("成功");
            }
            else {
                reject("失败");
            }
        })
    }

    // 此句说明,我们可以将一个表达式放进去,或者放一个数值,经过处理 再在f函数体内调用成功或错误的函数
    f(false)  
        .then((data) => console.log(data), (data) => console.log(data));

可以选择Promise自带的.catch方法捕获错误

    function f(a) {
        return new Promise((resolve, reject) => {
            if(a){
                resolve("成功");
            }
            else {
                reject("失败");
            }
        })
    }

    // 如果上一个执行函数未执行其中函数,catch 方法可以获取到上一个执行函数的 reject 函数,并且执行
    f(false)
        .then((data) => console.log(data))
        .catch(e => {
            console.log(e);
        })

Promise 的三种状态

  • pending:进行中

  • fulfilled:成功

  • rejected:失败

状态的改变不可逆,一但决议就不能再修改

Promise.all

该方法可以把多个 promise 实例包装成一个新的 promise 实例

Promise.all([promise1,promise2]):Promise --- 最终返回 Promise 实例;

  1. 全部加载成功 则返回所有promise实例中resolve()回来带的参数,按数组中一一对应的顺序所集合的数组

  2. 若任意有一个失败 ,立即决议失败,但会执行成功的实例,后将失败的 promise 实例(reject()中参数)传递给我们

  3. Promise.all([])中,数组为空数组,则立即决议为成功执行resolve()

Promise.race

只要有一个 Promise 实例被决议,则返回该实例带来的resolve()reject()的参数

Promise.resolve 方法,Promise.reject 方法

  1. 如果 resolve 方法中是一个值的话,则返回一个新的 Promise 对象,且它的状态为 fulfilled

  2. 如果 resolve 方法中是一个包含 then 方法的对象时(又称 thenable 对象),则返回一个新的 Promise 对象,且它的状态为 fulfilled

  3. 如果接受的是一个 Promise 实例,则返回这个 Promise 实例

Promise.reject 方法类似,但就是状态为 rejected

小技巧

同步任务要比异步任务先执行

相关文章

网友评论

      本文标题:ES6-promise

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