Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.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 鸡肉或鸡蛋,带分辨率,设备就绪,使用SQLite插件检索数据_Javascript_Sqlite_Cordova_Ionic Framework_Ngcordova - Fatal编程技术网

Javascript 鸡肉或鸡蛋,带分辨率,设备就绪,使用SQLite插件检索数据

Javascript 鸡肉或鸡蛋,带分辨率,设备就绪,使用SQLite插件检索数据,javascript,sqlite,cordova,ionic-framework,ngcordova,Javascript,Sqlite,Cordova,Ionic Framework,Ngcordova,在我的Angular/Ionic应用程序中,当用户第一次打开应用程序时,我试图将其重定向到状态设置,但尚未设置默认帐户设置。为此, 我使用数据库SQLite(来自ngCordova使用的Phonegap构建中的brodysoft) 当且仅当用户已设置其帐户时,此数据库将包含一个表Variables 使用UI路由器,我将解析函数附加到第一个状态(Auth),另请参见下文 解析函数setupResolve()尝试从表Variables中检索数据,成功时解析状态“Auth”,失败时将用户重定向到状态

在我的Angular/Ionic应用程序中,当用户第一次打开应用程序时,我试图将其重定向到状态
设置
,但尚未设置默认帐户设置。为此,

  • 我使用数据库SQLite(来自ngCordova使用的Phonegap构建中的brodysoft)
  • 当且仅当用户已设置其帐户时,此数据库将包含一个表
    Variables
  • 使用UI路由器,我将解析函数附加到第一个状态(
    Auth
    ),另请参见下文
  • 解析函数
    setupResolve()
    尝试从表
    Variables
    中检索数据,成功时解析状态“Auth”,失败时将用户重定向到状态
    Setup
问题来了:

  • 要打开SQLite数据库并执行查询(如SELECT),设备需要准备就绪。在Ionic中,这对应于在函数
    $ionicPlatform.ready(){}
    中包装数据库的打开和查询-请参阅教程
  • 但是,在解决所有解析功能之前,设备将无法准备就绪
  • 但同样,为了解决这个问题,平台需要准备好,以便能够访问SQLite,这只有在所有函数都解决之后才能发生
所以,当你看到你在一个鸡或蛋的情况。具体地说,在我下面的代码中,在我的设备上打开应用程序时,函数ionicPlatform.ready()没有启动

奇怪的是,它在Google Chrome上运行得很好,但我的猜测是ionicPlatform.ready()在浏览器中被忽略了,或者还有其他标准

// 
  // I-1
  self.openDb = function(method) {

    //
    var qOpen = $q.defer();
    $ionicPlatform.ready(function() {

      // ** NEVER REACHED WHEN USED IN RESOLVE CONTEXT **

      // Open Db
      if(window.cordova) {
        db = $cordovaSQLite.openDB("starter.db");
      } else {
        db = window.openDatabase("starter.db", "1.0", "My app", 1024 * 1024 * 100);
      }

      // Create Tables
      self.createTables().then(function(){
        qOpen.resolve(true);
      }, function(error){
        qOpen.reject(error);
      })
    })
    return qOpen.promise;
  };
在.config中声明身份验证、代码

注意:setupResolve函数调用函数openDb()


我几乎把整页翻了两遍。发布Plunker实际上可以让我们在开始编写代码之前检查问题。如果有兴趣,我们可以这样做,然后我建议只关注openDb和Query部分,因为基本上问题是我正在尝试解决打开数据库和检索数据的问题。然而,要检索这些数据,平台需要准备好,但只有在所有问题都解决后,平台才准备好,所以你会遇到鸡或蛋的情况。我已经重写了我的问题,请看一下,现在是否更清楚了。
.state('auth', {
    url: '/auth',
    templateUrl: 'templates/single-auth.html',
    controller: 'AuthCtrl',  
    resolve: {
      setupResolve: setupResolve
    }
  })