这真的是异步的吗?或者它发生得太快了,没有什么区别
Is this really asynchronous or does it happen so fast it doesn't make a difference?
我正在尝试编写一种在WebDB环境中同步执行一组sqlite查询的方法。我已经提出了我认为相当于同步例程的东西,但我不确定如何测试它。我有:
var db = openDatabase("test1", "1.0", "test", 5 * 1024 * 1024);
function synchronousSql(tx, sqlStack, callback) {
if (sqlStack.length !== 0) {
var q = sqlStack.shift();
console.log(+new Date() + ' ' + q);
tx.executeSql(q, [], synchronousSql(tx, sqlStack, callback), null);
} else {
callback();
}
}
var seq = [
'drop table if exists table1',
'drop table if exists table2',
'drop table if exists table3',
'drop table if exists table4',
'drop table if exists table5',
'create table table1(id integer, value text)',
'create table table2(id integer, value text)',
'create table table3(id integer, value text)',
'create table table4(id integer, value text)',
'create table table5(id integer, value text)',
'drop table if exists table1',
'drop table if exists table2',
'drop table if exists table3',
'drop table if exists table4',
'drop table if exists table5'
];
db.transaction(function(tx) {
synchronousSql(tx, seq, function() {
console.log(+new Date() + ' - from synchronousSql callback');
});
}, null, function() {
console.log(+new Date() + ' - from transaction callback');
});
理论上(我认为)应该行得通。看着它,我认为我的警告消息将弹出时,最后的语句执行,不一定当它返回,但我不确定如何解决这个问题。我尝试在synchronousSql
函数的参数中指定一个回调,但这意味着我必须用回调递归地调用它,如果我使用一个空的匿名函数,它似乎会覆盖所需的回调。
我想有两个问题:首先,这真的是同步的吗?第二,我如何实现一个最后的回调来运行在堆栈的最后一个回调?
edit:将代码更新为最新版本。但第一个问题仍然存在:这真的是同步的吗?
在代码中放入alert()
和setTimeout()
以测试它们是同时执行还是分开执行。这通常是一个很好的测试方法。如果所有代码同时执行(异步),那么你将立即有10个警报隐藏-否则你每x毫秒得到一个
关于你的第二个问题:检查堆栈是否为空。您可能需要通过函数传递第三个变量。除非在全局作用域中定义变量,否则它不会被覆盖。
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- 在ember/handlers中使用value和valueBinding有什么区别
- 这两个关于 JavaScript 作用域链的例子有什么区别?
- 什么's本地node.js服务器和python简单http服务器之间的区别
- Math.min()和Math.max()之间有什么区别?在Javascript中
- angularjs中的ng网格和ui网格有什么区别
- webpack开发模式和生产构建模式之间有什么区别
- 缓存!saveLocations()和addLocation()函数有什么区别
- 关于承诺/A+规范,术语“当时可”和“承诺”之间有什么区别
- 以下两者在javascript中有什么区别
- 什么's extjs中的mon()和on()之间的区别
- jquery.js和jquery.lite.js有什么区别
- 通过Nuget安装Angular JS和Angular JS核心有什么区别
- XMLHttpRequest对象的open()和send()方法之间有什么区别
- 这两种不同的创建对象文字的方法有什么区别
- jQuery中这两个词有什么区别
- 在Javascript语法中:和::和:::有什么区别
- 什么'这是JS中以下定义方式的区别
- getElementById 和 getElementsByClassName 有什么区别?
- (typeof variable === “function”) 和 jQuery.isFunction() 有什么区别