私はデータベースを使用するIonicアプリを持っています。私はこのデータベースにファイルの内容を書きたいと思っています。
私は働いています。 $ionicPlatform.ready()
またはdocument.ready()
とよく似たDB.ready()
イベントを作成したいのですが、クエリを実行するまでデータベースが読み込まれるまで待つ必要があります。ionicPlatform.ready()やdocument.ready()のようなカスタムイベントを作成します。
私は、イオンとプロミスのコンセプトにかなり新しいので、簡単なものかもしれません。
私はAndroidで動作するようになっていますが、iOSは "someTablenameが存在しません"というクエリでエラーを返し続けます "私は複数のconsole.log()
を配置しましたが、それらのすべてには問題ありません。
私が間違ったやり方を教えてもらえませんでしたか、それとももっと一般的な場合は別の方法でしょうか(また、私は新しいので、よく分からない)?
すべてのクエリに「query
」が記録されると予想されましたが、これは重要ではありませんか?私のアプリを通じて
// L35_DB - Databaseclass for apps
.factory('L35_DB', ['$ionicPlatform','$cordovaFile','$cordovaSQLite', function($ionicPlatform, $cordovaFile,$cordovaSQLite) {
var L35_DB = {db_start : false};
//-------------------------------------
DB_READY = new Promise(function(resolve,reject){
console.log("query");
if(L35_DB.db_start){console.log("b"); resolve("Stuff worked!"); }
else{
var filename='fileWithDB.db';
$ionicPlatform.ready(function() {
if(window.cordova){
return window.plugins.sqlDB.copy(filename, 0,
function(info){ loadDB(filename).then(function(){ console.log("First load", info); resolve("DB loaded?"); }) },
function(info){ loadDB(filename).then(function(){ console.log("Other loads", info); resolve("DB loaded?"); }) }
);
}
});
}
});
//-------------------------------------
// Load the file
function loadDB(filename){
var loading = new Promise(function(resolve,reject){
db = window.sqlitePlugin.openDatabase(
{name: filename, location: 'default'},
function(){
console.log("loadDB success"); // <--- fired
L35_DB.db_start = true; // true, so next call we don't do all this
resolve("DB ready loading");
},
function(err){ reject(err);}
);
});
return loading;
}
//-------------------------------------
// Query -
var _query = function(query,values){
if(!L35_DB.db_start){
console.error("DB not init");
return false;
}
else if(window.cordova){
values = values || [];
var actualQuery = new Promise(function(resolve,reject){
db.executeSql(query, values, resolve, reject);
})
return actualQuery;
}
}
//-------------------------------------
return {
query : _query
};
}])
は私が行います
DB_READY.then(function() {
L35_DB.query("SELECT * FROM systems").then(function (result) {
// Something something something darkside
})
})