在PhoneGap中链接SQLite调用

时间:2014-12-18 07:25:12

标签: javascript sqlite cordova asynchronous race-condition

我在电话间隙中链接SQLite调用以实现同步性,如下所示:

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

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

1 个答案:

答案 0 :(得分:1)

在这种情况下,我认为您不应该在其他交易中进行新交易。你可能想要的是在那里进行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();
            });
        });
    });
};

现在发生的事情如下:

  1. 获得交易,
  2. "您的查询" 已执行,
  3. 获取该数据时,执行" SECOND QUERY"
  4. 获取该数据时,执行" THIRD QUERY"
  5. 获取该数据时,将调用 updateRiders