我正在使用firefox扩展中的sqlite数据库进行通信。首先,我使用this同步代码。然后我将其更改为this异步代码,但以错误结束
anchors[i] is undefined, Line 95
This更改没有帮助。
变量范围似乎存在一些问题。
谢谢你的帮助
答案 0 :(得分:1)
一个问题是anchors
显然是document.anchors
返回的节点集合。因此,它不是固定列表,如果文档发生更改,它将会更改。在数据库查询运行时,可能会从文档中删除锚点。要防止出现此类问题,您可以复制该集合:
var anchors = Array.prototype.slice.apply(document.anchors);
这将使anchors
成为一个不会意外更改的常规数组。
另一个问题是所有闭包函数都使用相同的变量i
(有关详细信息,请参阅https://developer.mozilla.org/en/JavaScript/Guide/Closures)。 handleResult
执行时i
将具有值anchors.length
,因为循环已经完成。为防止这种情况,您需要捕获i
的“当前”值,例如在像这样的对象属性中:
statement.executeAsync({
anchorIndex: i,
handleResult: function(aResultSet) {
...
anchors[this.anchorIndex]
...
}