【问题标题】:variable is undefined when attached to callback function (Javascript / Dojo)附加到回调函数(Javascript / Dojo)时变量未定义
【发布时间】:2014-08-26 14:49:46
【问题描述】:

我在全局范围内声明了这个变量:

  var wait;

然后,在事件侦听器中,我为这个变量分配一个函数,然后附加一个回调函数:(我正在使用 Dojo,通过 ArcGIS Javascript API)

  wait = doThis();

  wait.addCallback(function (){

    doNextThing();

  });

doThis 从地图中删除一些图层:

 doThis(){
        var layer = map.getLayer("mapLayer");
         if (layer) {
             map.removeLayer(layer);
}

..但是当我运行它时,我收到一条错误消息,提示“等待”未定义...

我的代码中其他地方有类似的语法可以工作...是因为我在事件侦听器中分配了回调吗?如果是这样,是否有解决方法?我真的需要在 doNextThing() 开始之前完成 doThis()。

【问题讨论】:

  • 等待 = doThis();评估'doThis()'的结果。如果'doThis'是一个函数,那么你应该尝试'wait = doThis'
  • 我不认为是这样,这会导致错误:'wait.addCallback is not a function'
  • function doThis 长什么样子?
  • doThis 不返回任何内容。你认为addCallback 来自哪里?
  • 我添加了一个返回值,但这并没有改变结果。

标签: javascript callback scope global-variables arcgis-js-api


【解决方案1】:

在 JavaScript 函数中总是返回值,如果你在函数中跳过 return 关键字,它会自动返回 undefined。在您的doThis 代码中没有返回语句。这就是wait 未定义并在下一步失败的原因。

应该返回什么?从显示的示例中,我们只能推断从 doThis() 返回的对象提供了 addCallback 函数。由于 ArcGIS 是基于 Dojo Toolkit 构建的,因此它可能是 Deferred 对象。 What returns Deferred 是开放式问题,您的示例中没有其他线索。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 2013-03-24
    • 1970-01-01
    相关资源
    最近更新 更多