Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.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 创建自定义事件,如ionicPlatform.ready()或document.ready()_Javascript_Android_Ios_Sqlite_Ionic Framework - Fatal编程技术网

Javascript 创建自定义事件,如ionicPlatform.ready()或document.ready()

Javascript 创建自定义事件,如ionicPlatform.ready()或document.ready(),javascript,android,ios,sqlite,ionic-framework,Javascript,Android,Ios,Sqlite,Ionic Framework,我有一个Ionic应用程序,其中我使用一个数据库。我想用文件的内容填充此数据库。 这部分我开始工作了。我想创建一个DB.ready()事件,很像$ionicPlatform.ready()或document.ready(),因为我需要等待数据库加载,直到查询它 我对爱奥尼亚公司和承诺的概念还相当陌生,所以它可能很简单 我已经让它在安卓系统中运行,但iOS在查询中不断返回一个错误“someTablename不存在”。我放置了多个console.log(),根据这些设置,一切正常 有谁能告诉我哪一部

我有一个Ionic应用程序,其中我使用一个数据库。我想用文件的内容填充此数据库。
这部分我开始工作了。我想创建一个
DB.ready()
事件,很像
$ionicPlatform.ready()
document.ready()
,因为我需要等待数据库加载,直到查询它

我对爱奥尼亚公司和承诺的概念还相当陌生,所以它可能很简单

我已经让它在安卓系统中运行,但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
    };
}])

经过大量的测试和挖掘,原来是罪魁祸首

第二个值“位置”可以更改。它默认为
0
,但对于iOS,它必须是
2
。在这一变化之后,一切都完全按照预期进行

这个函数应该为Android和iOS预加载数据库,假设它实际加载有点太早了

DB_READY.then(function () {
  L35_DB.query("SELECT * FROM systems").then(function (result) {
    // Something something something darkside
  })
})