gpt4 book ai didi

javascript - 将数据从 executeAsync 返回到调用函数 (javascript/mozilla)

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:49:41 25 4
gpt4 key购买 nike

我是 Javascript 的新手,正在尝试编写一个 firefox 附加组件。
我正在尝试将从 SQL 查询返回的数据传递/提取到调用函数。好像不行。
我搜索了有关变量范围的信息,查看了我可以在该站点上看到的任何相关帖子,并尝试了据说有效但对我无效的示例。

我使用的存储信息来自: https://developer.mozilla.org/en/Storage
https://developer.mozilla.org/en/mozIStorageStatement

我做错了什么,或者我应该怎么做?
我在 xp 上运行 firefox 12。

function Sqlite() {
this.dbConn = "";
this.empty = true;
}

Sqlite.prototype.retrieveData = function(query)
{
var rows = new Array(); // to be returned to the calling function
var stmt = this.dbConn.createStatement(query); // my "select..." statement

stmt.executeAsync ({
handleResult: function(aResultSet)
{
this.empty = false;
var i = 0;
for (let row; row = aResultSet.getNextRow();i++) {
rows[i] = row;
}
},

handleError: function(anError) {
//some code
},

handleCompletion: function(aReason) {
if (this.empty) {
// CODE FOR WHEN STATEMENT EXECUTION IS FINISHED
}
if (aReason == Ci.mozIStorageStatementCallback.REASON_FINISHED) {
document.getElementById("debug").value = rows[0]; //gets the data from the query: [xpconnect wrapped mozIStorageRow]
return true;
}
}
});
document.getElementById("debug").value = rows[0]; //gets undefined
stmt.finalize();

return rows; // the info is no longer available at this point.
}

非常感谢你的帮助

最佳答案

你描述问题的方式有点含糊,但是当你写的时候:


返回行;//此时信息不再可用。

这当然是预期的executeAsync,顾名思义,就是异步的。这意味着当您调用 executeAsync 时,该操作将安排在以后。 Javascript 具有运行到完成的语义,因此执行将继续,直到到达 return rows 语句。此时,查询还没有执行!一旦您的函数完成,JS 引擎将执行您的异步语句并调用您的 handleCompletion 回调。然后由 handleCompletion 中的代码来处理数据,例如调用另一个函数来处理它。

另外,您的 empty 变量似乎不需要。

handleCompletion: function(aReason) {
if (aReason != Ci.mozIStorageStatementCallback.REASON_FINISHED) {
// something went wrong
} else {
// do something useful with rows
}
},

最后,您需要调用row.getResultByName来获取行中某列的值。

关于javascript - 将数据从 executeAsync 返回到调用函数 (javascript/mozilla),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10869057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com