从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

大家好,我在从我的一个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()中;上面,我试图获得正确的值,但是当我运行代码时,我几乎总是得到一个未定义的返回值。当我在JSOBJ.container.getName()中取消注释我的警报语句时,getName函数似乎在不调用回调的情况下运行,警报弹出,然后调用getName函数。所以它感觉像一个竞争条件,我想说它与闭包有关,但我不确定如何正确地实现它,以便它“等待”getField返回一个值。有人能帮忙吗?

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

在回调完成之前,如果不完全冻结浏览器,您无法创建函数块,这不是一个好主意

您需要让您的
getName
函数接受回调并为回调赋值,就像
companyfn.app.getInfo
一样