总结关于promise链式调用的几个原理

237 阅读1分钟

前言

在了解promise链式调用原理之前,首先我们要知道以下几点 :

  1. then在链式调用时,会等前一个then或者函数执行完毕,返回状态,才会执行回调函数。
  2. 需要判断上一个promise对象返回的值是普通值还是promise对象
  3. promise原理
  • 一个promise的状态一旦确认,无法更改
  • 上一个promise的结果不会影响下一个promise的结果

代码演示如下 :

    function increment(value) {
        return value + 1;
    }
    function doubleUp(value) {
        return value * 2;
    }
    function output(value) {
        console.log(value);
    }
    var res = Promise.resolve(1);
    res.then(increment)
     .then(doubleUp)
     .then(output)

结果分析

上述代码结果为 : 4

    // 状态:resolved; promiseValue: 1
    var res = Promise.resolve(1); 

    // res的状态是resolved; 
    // 在执行then的第一个参数,即increment时
    // 把res的 promiseValue 1 传入
    // increment执行后的返回值就是2
    // res1的状态是resolved,promiseValue是2 
    var res1 = res.then(increment) 

    // res1的状态是resolved; 
    // 在执行then的第一个参数,即doubleUp时
    // 把res1的promiseValue 2传入
    // doubleUp执行后的返回值就是4
    // res2的状态是resolved,promiseValue是4
    var res2 = p1.then(doubleUp)

    // res2的状态是resolved,promiseValue是4
    // 在执行then的第一个参数,即output时
    // 把res2的promiseValue传入,就是4
    var res3 = res2.then(output)
个人总结

在Promise实例生成以后,可以用then方法分别指定resolved状态和rejected状态的回调函数。且都会返回一个Promise实例,所以可以链式调用then方法,上一个的返回值,可以作为下一个的参数。