嘿大家 - 我在从我的一个Javascript回调函数中正确获取返回值时遇到了一些困难,它看起来依赖于竞争条件,但我不确定:
JSOBJ.container = function() {
return {
getName: function() {
var value;
companyfn.app.getInfo(callback);
function callback(foo) {
// alert("gets here");
if (foo.hadError()) {
alert("Error found!");
} else {
value = foo.getField(companyfn.app.Field.SUB_DOMAIN);
}
// alert('callback: ' + value);
}
return value;
}
}
}();
JSOBJ.main = function () {
return {
init: function() {
alert(JSOBJ.container.getName());
}
};
}();
在JSOBJ.main.init();上面,我试图获得正确的值,但是当我运行我的代码时,我几乎总是得到undefined的返回值。当我在JSOBJ.container.getName()中取消注释我的警报语句时,getName函数似乎在不调用回调的情况下运行,警报弹出,然后调用getName函数。所以感觉就像一个竞争条件,我想说它与闭包有关,但我不确定如何正确实现它所以它“等待”getField返回一个值。有人可以帮忙吗?
答案 0 :(得分:0)
将定义的函数传递给您的ajax调用(我假设这是一个ajax调用)或将其作为匿名lambda传递。您的回调函数是在通过它的调用后动态创建的。
答案 1 :(得分:0)
在回调完成而没有完全冻结浏览器之前,你无法进行功能阻止,这是不一个好主意。
您需要让getName
函数进行回调并为回调设置其值,就像companyfn.app.getInfo
一样。