理解Javascript异步调用
我在另一个问题中发布了大部分相同的代码,但我有一个不同的问题-我应该如何理解Javascript异步代码理解Javascript异步调用,javascript,function,asynchronous,Javascript,Function,Asynchronous,我在另一个问题中发布了大部分相同的代码,但我有一个不同的问题-我应该如何理解Javascript异步代码 function getUserStatus() { var status; function querySuccess(tx, results) { var len = results.rows.length; var row = results.rows.item(0); console.log(row['id']);
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,学习使用异步技术一开始很困难,但只要你能集中注意力,就很容易了:)我们可以借助async Wait来完成这项工作,async Wait是一种更简单、更清晰的异步代码编写方法。 异步函数getUserStatus(){ var状态; 数据库事务(功能(tx){ 试一试{ var result=await tx.executeSql('SELECT id FROM calculator ORDER by id ASC LIMIT 1'); var len=results.rows.length; 变量行=结果行项目(0); log(第['id']行); 状态={ 问题:第['id'行] }; }捕获(错误){ 控制台日志(err); } } }); }
我希望这会有所帮助。它始终是异步的。您不需要自己调用
querySuccess
,查询完成后会自动调用它。将console.log()
调用放入querySuccess()
中。依赖于查询成功完成的所有内容都应该在querySuccess()
函数中。您无法从函数返回状态
。Uncaught TypeError:undefined不是一个函数我花了相当长的时间来处理这个函数,但我最终理解了它,并通过一些额外的阅读获得了正确的回调。谢谢你的帮助。