[js hard core] 解決js 當中時序問題的一小部分(變數未定義)

js 是很動態的語言, include 和 Ajax 兩個因素導致他的執行緒有分岔的情形
不像其它需要compile 的語言, 執行程序是相當"由上到下一直線"的
也因此常常遇到那種下面的code 已經執行到了
上面相關的code 卻還沒有處理到的情況
最常見的問題就是會導致變數處在沒有定義的狀態
導致error, 今天就遇到這類的問題
我的處理方式如下:


function checkTagtoo(){
    var tagtoo_jQuery = tagtoo_jQuery || [];
 
    if (tagtoo_jQuery != []){
        tagtoo_jQuery(document).ready(function(){
            checkLoginStatus();
            checkHighlightIcon();
            tagtoo_jQuery(".not_yet_complete").live('click', function(e){
                alert("網頁建置中, 請稍候!");
                e.preventDefault();
                e.stopPropagation();
            });
        });
     
        tagtoo_jQuery("#login_btn").live('click', function(e){
            e.preventDefault();
            FacebookConnectWithTagtoo("StaticPageLoginCallback");
        });
     
        // logout part
        tagtoo_jQuery("#logout_btn").live('click', function(e){
            e.preventDefault();
            doFacebookLogout();
        });
    }
    else{
        window.setTimeout("checkTagtoo();",200);
    }
}

注意到了嗎? 問題的癥結點是在tagtoo_jQuery 這個變數, 我把他包在checkTagtoo 函式裡了, 預先定義一個預設值給他, 如果測試其值為預設值, 就知道此變數還沒load 進來, 隔一小段時間後再行測試(本例為200毫秒, 可自行決定重試的時間長短), 直到tagtoo_jQuery 有定義為止! 我在猜很多時序性套件底層的實作方式可能也是這樣的!


留言

熱門文章