zoukankan      html  css  js  c++  java
  • Waiter.js

    var Waiter = function() {
        var dfd = [],
            doneArr = [],
            failArr = [],
            slice = Array.prototype.slice,
            that = this;
        var Primise = function() {
            this.resolved = false;
            this.rejected = false;
        }
        Primise.prototype = {
            resolve: function() {

                this.resolved = true;
                if (!dfd.length) {
                    return;
                }
                for (var i = dfd.length - 1; i >= 0; i--) {
                    if (dfd[i] && !dfd[i].resolved || dfd[i].rejected) {
                        return;
                    }
                    dfd.splice(i, 1);
                }
                _exec(doneArr);
            },
            reject: function() {
                this.rejected = true;
                if (!dfd.length) {
                    return;
                }
                dfd.splice(0);
                _exec(failArr);
            }
        }
        that.Deferred = function() {
            return new Primise();
        }

        function _exec(arr) {
            var i = 0,
                len = arr.length;
            for (; i < len; i++) {
                try {
                    arr[i] && arr[i]();
                } catch (e) {}
            }
        };
        that.when = function() {

            dfd = slice.call(arguments);
            var i = dfd.length;
            for (--i; i >= 0; i--) {
                if (!dfd[i] || dfd[i].resolved || dfd[i].rejected || !dfd[i] instanceof Primise) {
                    dfd.splice(i, 1);
                }
            }
            return that;
        };
        that.done = function() {

            doneArr = doneArr.concat(slice.call(arguments));
            return that;
        };
        that.fail = function() {
            failArr = failArr.concat(slice.call(arguments));
            return that;
        };
    };

    var waiter = new Waiter();


    var first = function() {
        var dtd = waiter.Deferred();
        setTimeout(function() {
            console.log('first finish');
            dtd.resolve();
        }, 5000);
        return dtd;
    }();

    var second = function() {
        var dtd = waiter.Deferred();
        setTimeout(function() {
            console.log('second finish');
            dtd.resolve();
        }, 0);
        return dtd;
    }();

    waiter.when(first, second).done(function() {
        console.log('first success');
    }, function() {
        console.log('second success');
    }).fail(function() {
        console.log('fail');
    })
  • 相关阅读:
    ~/.fvwm/.fvwm2rc
    我的.Xresources
    getopt得用法
    C语言编程好习惯(持续更新)
    关于stm32的USB学习笔记之usbcore.c
    Fvwm.desktop内容
    XP下JDK不能安装的解决办法
    以后网络上的好东东,在这里加个链接,呵呵!太丰富了!
    ISO/OSI七层参考模型
    VC 和 MFC 的一些常见问题
  • 原文地址:https://www.cnblogs.com/shidengyun/p/5338754.html
Copyright © 2011-2022 走看看