我在另一个问题中发布了大部分相同的代码,但我在这里有一个不同的问题 - 我应该如何理解 Javascript 异步代码?
function getUserStatus() {
var status;
function querySuccess(tx, results) {
var len = results.rows.length;
var row = results.rows.item(0);
console.log(row['id']);
status = {
question: row['id']
};
}
function errorCB(err) {
console.log(err);
}
db.transaction(function(tx) {
tx.executeSql('SELECT id FROM calculator ORDER by id ASC LIMIT 1', [], querySuccess, errorCB);
});
querySuccess();
console.log(status);
return status;
}
我知道我的代码在变量状态被定义之前执行 - 但是我如何停止处理直到状态被定义?我不希望此过程是异步的 - 如果没有从数据库传送任何内容,那么我不希望操作继续。
我的印象是我需要调用 querySuccess(),但我会向它传递什么参数?
我对 Javascript 比较陌生,以前从未遇到过这个概念,我对它的工作原理以及如何让我的代码按我想要的方式执行感到有些困惑。
最佳答案
当我第一次学习异步编程时,我发现将匿名函数作为回调传递更容易:
function getUserStatus(returnCallback) {
db.transaction(function(tx) {
tx.executeSql('SELECT id FROM calculator ORDER by id ASC LIMIT 1', [],
function(tx, results) { //querySuccess callback
var len = results.rows.length;
var row = results.rows.item(0);
console.log(row['id']);
var status = {question: row['id']};
console.log(status);
returnCallback(status);
},
function(err) { //error callback
console.log(err);
returnCallback(err);
});
});
}
我重写了一些内容并添加到您的代码中。希望这有帮助:)
不幸的是,我现在没有时间详细介绍和解释所有这些是如何工作的。如果其他人想要编辑此答案来执行此操作,请继续。
祝你好运 OP,一开始学习使用异步技术很困难,但一旦你掌握了它就真的很容易:)
关于javascript - 了解 Javascript 异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28468358/