1

我有一个小问题,我认为这可能是我对 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 数组为空。从内部函数中访问时, vals 包含预期的所有元素。

非常感谢我在这件事上能得到的任何帮助。

4

1 回答 1

1

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

于 2012-11-30T05:04:48.820 回答