等待变量存在然后在javascript中执行某些操作

时间:2012-04-17 09:02:18

标签: javascript multithreading function callback

我有一个脚本,它将在必须读取的变量被加载之前执行..

这是我将首先执行的脚本

funcThatWaits(varToWait).ready(function(){
        //callback time!!
    alert("varToBeWait is Ready!!");
});

这是下一个要加载的脚本

var varToWait=null;

我想要的是创建一个等待变量存在的函数,并在检测到已存在的变量时自动进行回调。(这意味着当变量不存在时它会等待)

这可能吗?我的第一个脚本完全复制在jquery的$(document).ready()函数上,它等待DOM完全加载......这对于JS变量是否可能?

1 个答案:

答案 0 :(得分:1)

如果您的变量来自另一个函数(可能来自另一个作用域),那么您可以传递回调并在第二个函数执行回调时为其提供变量。您不需要等待它存在,但是您将等到第二个脚本为您提供

//in the second script:

var varIWant = 'foo'

function fromSecondScript(callback){
    callback(varIWant);
}

//in the first script:

function fromFirstScript(){
    fromSecondScript(function(theVar){
        //"theVar" in this function scope is "varIWant" from the other scope
    })
}

另一种方法是预先定义一个加载器脚本来聚合回调并在设置变量后调用它们:

var aggregator = (function(){
    var stored = {};

    return {
        //adds a callback to storage
        addCallback : function(varName,callback){
            if(!stored.hasOwnProperty(varName)){
                stored[varName] = [];
            }
            stored[varName].push(callback);
        },
        //executes stored callbacks providing them data
        execute : function(varName,data){
            if(stored.hasOwnProperty(varName)){
                for(var i=0;i<stored[varName].length;i++){
                    stored[varName][i](data)
                }
            }
        }
}());

//in the first script add callbacks. you can add any number of callbacks
aggregator.addCallback('VarExists',function(theVar){
    //do what you want when it exists
});

aggregator.addCallback('VarExists',function(theVar){
    //another callback to execute when var exists
});

//in the second script, execute the callbacks of the given name
aggregator.execute('VarExists',theVarYouWantToShare);