コード農産物シリーズ【6】Javascript異歩プログラミングのもの:世界で一番短いPromiseライブラリ

4344 ワード

ソースコード
    var Promise = function () {

        this.thens = [];

    };

    Promise.prototype = {

        resolve: function () {

            var t = this.thens.shift(), n;

            t && (n = t.apply(null, arguments), n instanceof Promise && (n.thens = this.thens));

        },

        then: function (n) {

            return this.thens.push(n), this;

        }

    }
.csharpcode.csharpcode pre
{
font-size:small;
カラー:black
font-family:consosolas、「Courier New」、courier、monoospace;
background-カラー:菗菗ffff;
//white-space:pre;*/
)
.csharp code pre{margin:0 em;}
.csharpcode.rem{color=0000 ff}
.csharpcode.kwrd{color=0000 ff}
.csharpcode.str{color=red}
.csharpcode.op{color=0000 c 0}
.csharpcode.preproc{color=red}
.csharpcode.asp{background}
.csharrpcode.html
.csharpcode.atr{color=red}
.csharpcode.alt
{
background-彩色:〹f 4 f 4;
width:100%
magin:0 em;
)
.csharpcode.lnum{color=0000 ff}
使い方
        function f1() {

            var promise = new Promise();

            setTimeout(function () {

               

                alert(1);

                promise.resolve();

            }, 1500)



            return promise;

        }



        function f2() {

            var promise = new Promise();

            setTimeout(function () {



                alert(2);

                promise.resolve();

            }, 1500)



            return promise;

        }



        function f3() {

            var promise = new Promise();

            setTimeout(function () {



                alert(3);

                promise.resolve();

            }, 1500)



            return promise;



        }



        function f4() {

                alert(4);

        }

      

        f1().then(f2).then(f3).then(f4)
.csharpcode.csharpcode pre
{
font-size:small;
カラー:black
font-family:consosolas、「Courier New」、courier、monoospace;
background-カラー:菗菗ffff;
//white-space:pre;*/
)
.csharp code pre{margin:0 em;}
.csharpcode.rem{color=0000 ff}
.csharpcode.kwrd{color=0000 ff}
.csharpcode.str{color=red}
.csharpcode.op{color=0000 c 0}
.csharpcode.preproc{color=red}
.csharpcode.asp{background}
.csharrpcode.html
.csharpcode.atr{color=red}
.csharpcode.alt
{
background-彩色:〹f 4 f 4;
width:100%
magin:0 em;
)
.csharpcode.lnum{color=0000 ff}
クラスの考え方
メインPromiseの下のタスクリストをサブPromiseにくっつけるという考えです.もちろん、ライブラリはajax、domreadyなどの時間がかかるシーンにカプセル化できます.
          $$.ajax("assets/xxx.php", {

                     method: "GET",

                     data: "q=1&rand=" + Math.random()

                 }).then(function (msg) {

                     alert(msg.responseText)

                 });
.csharpcode.csharpcode pre
{
font-size:small;
カラー:black
font-family:consosolas、「Courier New」、courier、monoospace;
background-カラー:菗菗ffff;
//white-space:pre;*/
)
.csharp code pre{margin:0 em;}
.csharpcode.rem{color=0000 ff}
.csharpcode.kwrd{color=0000 ff}
.csharpcode.str{color=red}
.csharpcode.op{color=0000 c 0}
.csharpcode.preproc{color=red}
.csharpcode.asp{background}
.csharrpcode.html
.csharpcode.atr{color=red}
.csharpcode.alt
{
background-彩色:〹f 4 f 4;
width:100%
magin:0 em;
)
.csharpcode.lnum{color=ble 6060;}have fun!  =!