{ Promise }

  • 一次「错误」的 Promise 实现 - 2

    | /

    时隔快两月,才产出了第二篇。在实际写博客中,发现Promise实在太难了,初稿在 2/18 就开始写,写到「链式调用」,发现自己还是对原理不够了解,于是耽搁了许久。期间又看了《你不知道的 JavaScript(中卷)》关于异步的部分,深觉自己的浅薄。

    我们总是说回调不好用,因为回调地狱,但是回调也可以不写成回调地狱,只是写法问题,如:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    foo(function () {
    foo(function () {
    foo(function () {
    console.log('callback hell');
    });
    });
    });

    // 可以写成这样
    function handler1() {
    foo(handler2);
    }

    function handler2() {
    foo(handler3);
    }
    function handler3() {
    console.log('callback hell?');
    }

    foo(handler1);

    而且本质上来说,Promise也是回调啊,Promise究竟在内部做了什么事情,让我们非常乐意接受了呢?

  • 一次「错误」的 Promise 实现 - 1

    | /

    Promise在日常中经常用到,并且也能够熟练使用:

    1
    2
    3
    4
    5
    6
    7
    new Promise((resolve) => {
    console.log('a')
    resolve('b')
    console.log('c')
    }).then((data) => {
    console.log(data)
    });

    上面代码会依次打印a、c、b,对此我们都毫无疑义。

    但是为什么呢?我们能自己实现一个Promise库吗?