Javascript:外部函数中的变量没有被内部函数改变

时间:2012-11-30 04:46:55

标签: javascript closures

我遇到一个小问题,我认为这可能是我对Javascript关闭的误解。

我有这段代码 -

getStdOpts: function(tbl, filt) {
    var vals = new Array();

    this.srvs.getStdOptions(
        { tbl: tbl },
        {
            'ok': function(rsp) {
                for (var i in rsp) {
                    vals.push({ value: rsp[i].id, text: rsp[i].descr });
                }
            }
        }
    );
    return vals;
}

本质上,尽管getStdOptions调用内部的函数('ok':function ...)将新值推送到vals数组中,但当从调用外部访问时,vals数组为空。当从内部函数中访问时,val包含所有预期的元素。

非常感谢我能帮助解决这个问题。

1 个答案:

答案 0 :(得分:1)

我怀疑这是封闭/范围问题。如果this.srvs.getStdOptions是异步操作,则getStdOpts总是返回一个空数组。一旦操作完成,该数组将被填充,正如所写的那样,将在您需要之后填充。你将不得不以不同的方式处理事情。要么你需要直接传入getStdOpts一个回调,它将vals作为参数并在this.srvs.getStdOptions的匿名回调中执行回调,或者你需要返回某种 promise 对象,您可以根据需要添加回调(基本上可以使用相同的vals作为参数) - 您必须在匿名回调中解决您的承诺{{1作为“承诺”的结果。