无法从Javascript回调中获取返回值

时间:2009-11-11 03:23:29

标签: javascript oop callback

嘿大家 - 我在从我的一个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返回一个值。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

定义的函数传递给您的ajax调用(我假设这是一个ajax调用)或将其作为匿名lambda传递。您的回调函数是在通过它的调用后动态创建的。

答案 1 :(得分:0)

在回调完成而没有完全冻结浏览器之前,你无法进行功能阻止,这是一个好主意。

您需要让getName函数进行回调并为回调设置其值,就像companyfn.app.getInfo一样。