Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在PhoneGap中链接SQLite调用_Javascript_Sqlite_Cordova_Asynchronous_Race Condition - Fatal编程技术网

Javascript 在PhoneGap中链接SQLite调用

Javascript 在PhoneGap中链接SQLite调用,javascript,sqlite,cordova,asynchronous,race-condition,Javascript,Sqlite,Cordova,Asynchronous,Race Condition,我将SQLite call链接到phone gap以实现同步性,如下所示: db.transaction(initDB, errorCB, function() { db.transaction(lookupContactDB, errorCB, function() { db.transaction(contactUpdateDB, errorContactCB, function() {

我将SQLite call链接到phone gap以实现同步性,如下所示:

db.transaction(initDB, errorCB, function() {
                db.transaction(lookupContactDB, errorCB, function() {
                    db.transaction(contactUpdateDB, errorContactCB, function() {
                        db.transaction(lookupUpdatedDB, errorUpdateCB, function() {
                            updateRiders();
                        })
                    })
                })
            });

然而,很明显,成功回调正在恢复我们的订单。当下一个事务应该只在调用前一个事务的成功回调时启动时,这怎么可能呢。我遗漏了什么吗?

我认为在这种情况下,您不应该在其他事务中进行新的事务。您可能想要的是在那里执行SQL。所以像这样的流程可能会更好

db.transaction(initDB, errorCB, function(tx) {
    tx.executeSql("YOUR QUERY", [], function(tx, results1) {
        tx.executeSql("SECOND QUERY", [], function(tx, results2) {
            tx.executeSql("THIRD QUERY", [], function(tx, results3) {
                updateRiders();
            });
        });
    });
};
现在发生的情况如下:

  • 交易获得后
  • “您的查询”已执行
  • 当获取该数据时,执行“第二次查询”
  • 当获取该数据时,“第三次查询”被执行
  • 获取该数据时,将调用updateRiders