【问题标题】:Having trouble getting a return value from a Javascript callback无法从 Javascript 回调中获取返回值
【发布时间】:2009-11-11 03:23:28
【问题描述】:

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

【问题讨论】:

    标签: javascript oop callback


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      在没有完全冻结浏览器的情况下,您不能在回调完成之前阻止您的函数,这不是一个好主意。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-12
        • 2019-01-28
        • 2018-12-27
        • 2016-01-07
        • 1970-01-01
        • 2016-03-27
        相关资源
        最近更新 更多