SELECT要求を開始する前に複数のINSERTが必要です。私の問題は、SELECTが起動したときにINSERTがまだ終了していないことです。データベース処理のための工場製Cordova SQLiteは挿入が完了するまで待つ
:
databaseFactory.js
factory.insertIntoTable= function (database, data) {
var sqlCommand = 'INSERT INTO blablabla';
database.transaction(function(tx) {
database.executeSql(sqlCommand, [data.thingsToInsert], function (resultSet) {
console.log('success: insertIntoTable');
}, function (error) {
console.log('SELECT error: ' + error.message);
});
}, function(error) {
console.log('transaction error: ' + error.message);
database.close();
}, function() {
console.log('transaction ok: insertIntoTable');
});
};
をINSERTはとにかく正常に動作しているapp.js
ionic.Platform.ready(function() {
if (window.cordova && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
cordova.plugins.Keyboard.disableScroll(true);
};
if(window.StatusBar) {
StatusBar.styleDefault();
}
db = window.sqlitePlugin.openDatabase({name: 'myDbName.db', location: 'default'});
if (window.Connection) {
if (navigator.connection.type !== Connection.NONE) {
databaseFactory.createTables(db);
MyService.getStuffFromAPI().then(function(result) {
for (var index = 0; index < result[0].campaigns.length; index++) {
databaseFactory.insertIntoTable(db, result[0].campaigns[index]);
}
var selectResult = databaseFactory.selectFromCampaigns();
console.log(selectResult); //This log comes earlier than the above inserts could finish.
}, function(result) {
console.log(result);
});
}
}
});
、私はそれを確認しました。
私はdatebase.transactionが非同期であることも知っているので、単一のdb.executeSQLコマンドでも試しましたが、$ q resolveを追加しても同じ問題がありました。私は本当に、いくつかの助けを使うことができました!
'$のq.all(約束)も'リターンを約束。 '$ q.all(約束).then(function(){//成功すると、ここであなたの選択を行いますか?}、function(err){//コードはエラー時}}' 。 –
ええ、私はそれをこのように変更し、まだ動作しません。 APIリクエストでは$ qではないので、終了したかどうかはわかりません。 SQLiteプラグインで試しましたか? – MagicDragon
私は最後に解決策を見つけたと思います。 – MagicDragon