use*_*890 8 javascript sqlite asynchronous synchronous web-sql
考虑:
var globalvar;
function viewyearmain() {
db.transaction(function (tx)
{
tx.executeSql('SELECT * FROM BUDGET WHERE holdingtype="month"', [], function (tx, results)
{
var len = results.rows.length;
msg = len;
globalvar = msg;
}, null);
});
if (globalvar>0)
{
alert("ROWS FOUND");
}
else
{
alert("ROWS NOT FOUND");
}
}
Run Code Online (Sandbox Code Playgroud)
ROWS NOT FOUND出现的问题是因为if到达语句时事务尚未完成.
无论您想要多少,异步回调都不是同步的.
只需将依赖于结果的所有代码移动到回调中:
var globalvar;
function viewyearmain() {
db.transaction(function (tx)
{
tx.executeSql('SELECT * FROM BUDGET WHERE holdingtype="month"', [], function (tx, results)
{
var len = results.rows.length;
msg = len;
globalvar = msg;
if (globalvar>0)
{
alert("ROWS FOUND");
}
else
{
alert("ROWS NOT FOUND");
}
}, null);
});
}
Run Code Online (Sandbox Code Playgroud)
或者,将其移动到第二个函数中,并从回调中调用它.
如今,您可以利用async / await这样的承诺:
async function alertResult() {
const rows = await viewyearmain();
if (rows.length) {
alert("ROWS FOUND");
} else {
alert("ROWS NOT FOUND");
}
}
function viewyearmain() {
return new Promise(resolve => {
db.transaction(function(tx) {
tx.executeSql(
"SELECT * FROM BUDGET WHERE holdingtype = ?;", ["month"],
function(tx, result) { resolve(result.rows); },
null
);
});
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13719 次 |
| 最近记录: |