了解Javascript异步调用
Understanding Javascript Asynchronous Calls
我在另一个问题中发布了大部分相同的代码,但我有一个不同的问题——我应该如何理解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,学习使用异步技术一开始很难,但一旦你能理解它,就很容易了:)
我们可以在异步等待的帮助下实现这一点,异步等待是编写异步代码的更简单、更清晰的方法。async function getUserStatus() {
var status;
db.transaction(function (tx) {
try {
var result = await tx.executeSql('SELECT id FROM calculator ORDER by id ASC LIMIT 1');
var len = results.rows.length;
var row = results.rows.item(0);
console.log(row['id']);
status = {
question: row['id']
};
} catch (error) {
console.log(err);
}
}
});
}
我希望这会有所帮助。
- jasmine 2-在jasmine指定的超时时间内未调用异步回调.DEFAULT_TIMEOUT_INTERVAL
- 递归调用异步函数
- Fine Uploader S3-无处安全调用异步“;setUploadSuccessParams()"
- 调用异步函数的循环
- 从视图调用异步加载模块函数
- 在循环中调用异步函数
- JavaScript ES6 承诺在 while 循环中调用异步操作
- 并行调用异步/等待函数
- 解析云代码:如何调用异步保存的承诺
- 量角器根据条件单击嵌套元素,错误 - 在指定的超时内未调用异步回调
- 反应组件调用了两次(AJAX调用异步)
- 使用 ajax 调用异步 Web api 方法
- NodeJS:调用异步函数时谁做异步工作
- 调用异步函数 befrore 服务器开始侦听
- Node JS 动态集合 ajax 调用异步等待
- 页面重定向后调用异步成功函数
- 如何在调用异步Web服务响应时将值设置为数组
- 如何在node.js可读流中调用异步函数
- 在nodejs中,是否有更好的设计模式来同步调用异步函数
- 同步调用异步 JavaScript 函数