从Javascript回调获取返回值时遇到问题
大家好,我在从我的一个Javascript回调函数中正确获取返回值时遇到了一些困难,它看起来取决于竞争条件,但我不确定:从Javascript回调获取返回值时遇到问题,javascript,oop,callback,Javascript,Oop,Callback,大家好,我在从我的一个Javascript回调函数中正确获取返回值时遇到了一些困难,它看起来取决于竞争条件,但我不确定: JSOBJ.container = function() { return { getName: function() { var value; companyfn.app.getInfo(callback); function callback(foo) { // alert("gets here"); if (foo.h
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()中;上面,我试图获得正确的值,但是当我运行代码时,我几乎总是得到一个未定义的返回值。当我在JSOBJ.container.getName()中取消注释我的警报语句时,getName函数似乎在不调用回调的情况下运行,警报弹出,然后调用getName函数。所以它感觉像一个竞争条件,我想说它与闭包有关,但我不确定如何正确地实现它,以便它“等待”getField返回一个值。有人能帮忙吗?将定义的函数传递给ajax调用(我假设这是一个ajax调用),或者将其作为匿名lambda传递。您的回调函数是在通过它的调用之后动态创建的。在回调完成之前,如果不完全冻结浏览器,您无法创建函数块,这不是一个好主意 您需要让您的
getName
函数接受回调并为回调赋值,就像companyfn.app.getInfo
一样