我遇到一个小问题,我认为这可能是我对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包含所有预期的元素。
非常感谢我能帮助解决这个问题。
答案 0 :(得分:1)
我怀疑这是封闭/范围问题。如果this.srvs.getStdOptions
是异步操作,则getStdOpts
总是返回一个空数组。一旦操作完成,该数组将被填充,正如所写的那样,将在您需要之后填充。你将不得不以不同的方式处理事情。要么你需要直接传入getStdOpts
一个回调,它将vals
作为参数并在this.srvs.getStdOptions
的匿名回调中执行回调,或者你需要返回某种 promise 对象,您可以根据需要添加回调(基本上可以使用相同的vals
作为参数) - 您必须在匿名回调中解决您的承诺{{1作为“承诺”的结果。