gpt4 book ai didi

Javascript 函数不返回查询结果(Cordova 的 SQLitePlugin)

转载 作者:行者123 更新时间:2023-12-03 11:37:31 26 4
gpt4 key购买 nike

我需要您的帮助来创建一个 SQLite 类,该类允许发送查询并返回结果。

我知道事务/executesql是异步的,我正在尝试解决这个问题。

我写了这段代码:

function SQLite(pName){
this.result = null;

//External function
this.Query = function(pQueryStr) {
this.result = null;
execQuery(pQueryStr);
//Waiting query result. While is null, sleep...
while(this.result == null){null;} //This line doesn't work
return this.result;
}

//Internal function for execute query
function execQuery(pQueryStr) {
//Emulating transacion-executesql functions with lag
setTimeout(function(){
this.result = "my query result";
}, 3000);
}
}

db = new SQLite("dbName");
var res = db.Query("query request string");
//As I can't wait for SQL result, 'res' returns null.
alert("External result: " + res);

这不起作用,但注释“while”行...这可以将此代码添加到末尾。

setTimeout(function(){
alert("External result (with lag): " + this.result);
}, 5000);

我的问题:我需要“一会儿”。该函数等待查询结果报告。

有什么解决方案或解决方法吗?

感谢您的宝贵时间!

最佳答案

我建议使用回调或 promise ,后者是我更喜欢的 https://www.promisejs.org/是一个很好的起点。

如果你仍然坚持使用 while (这很糟糕,因为你的应用程序将挂起,直到结果返回)。你的 while 循环不起作用

setTimeout(function(){
this.result = "my query result";
}, 3000);

因为此上下文已更改(更多信息请参见: http://ryanmorr.com/understanding-scope-and-context-in-javascript/ ),并且您必须在外部作用域中声明此属性,或绑定(bind)此上下文

function execQuery(pQueryStr) {
var that = this;
//Emulating transacion-executesql functions with lag
setTimeout(function(){
that.result = "my query result";
}, 3000);
}

您还需要进行递归检查而不是 while,例如:

var that = this;
function checkResult() {
if (that.result == null) {
console.log('repeat')
setTimeout(checkResult,1);
}
else {
console.log('success');
}
}
checkResult();
setTimeout(function() { that.result = true; },100)

关于Javascript 函数不返回查询结果(Cordova 的 SQLitePlugin),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26421502/

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