smilevchy's blog

Life & Study & Chasing

Call Function Lazily

某些场景下,在某些模块还未初始化完毕时就调用该模块的函数,可能会导致错误。这时候就需要延迟调用函数,等待该模块初始化完毕先再调用。

*. setTimeout 方法

ready = false;

this.func_to_be_called = function(params) {
    if (!ready) {
        setTimeout(function() {
            func_to_be_called(params);
        }, 100);
    }
};

var init = function() {
    // XXX

    ready = true;
};

*. 缓存调用函数对象方法

var ready = false;
var waitings = [];
var addWaiting = function (fn, param, cb) {
    waitings.push({
        fn: fn,
        param: param,
        cb: cb
    });
};
var noticeWaiting = function () {
    $.each(waitings, function (index, waiting) {
        waiting.fn(waiting.param, waiting.cb);
    });
    waitings = [];
};

this.func_to_be_called = function(params) {
    if (!ready) {
        addWaiting(function (params) {
            _this.func_to_be_called(params);
        }, params, null);
        return;
    }
};

var init = function() {
    // XXX

    ready = true;
    noticeWaiting();
};

javascript

« My First Game - CatRush Interrogation of AsyncTask »