【问题标题】:$firebase promise resolve in phonegap app$firebase 承诺在 phonegap 应用程序中解决
【发布时间】:2014-02-20 16:39:42
【问题描述】:

我已经坚持了几天了。

我有解析路线,看起来像这样:

.when('/list/',{
   controller : 'list',
      templateUrl : 'template/list.stache',
      resolve : {
        list : function($q,$firebase){
          var d = $q.defer(),
              ref = new Firebase(_config.url+'/list/');

         ref.once('value', function(s){
            if(s.val() == null){
              d.reject('Object not found');
            }

            d.resolve($firebase(ref));
         });

            return d.promise;
        }
   }

})

它在任何浏览器中都很好用,由于某种原因它在 Android 应用程序中失败(使用 phonegap ),它正确加载数据,但是当您尝试保存它时(使用 $save() ),数据在本地更新但无法执行如此遥远。

测试了一些理论,尝试在控制器中调用 $firebase,使用类似:

    $scope.fb = $firebase(new Firebase(_config.url+'/list/'))
    $scope.fb.$on('loaded', function(d){
        $scope.fb[$scope.fb.$getIndex()[0]].test = 'AAAAAA!'
        $scope.fb.$save()

    })

上面的工作正常,所以我认为它与承诺有关。

有人有什么想法吗?

编辑---

仍在努力找出问题,但能够缩小范围以解决:

.when('/list/',{
  controller : function(){
     new Firebase('https://XXX.firebaseio.com/test/').push('Hey!');
  },
  templateUrl : 'template/list.stache',
  resolve : {
    list : function($q,$firebase){
      var d = $q.defer(),
          ref = new Firebase(_config.url+'/list/');

     ref.once('value', function(s){
        if(s.val() == null){
          d.reject('Object not found');
        }

        d.resolve($firebase(ref));
     });

        return d.promise;
    }
 }

})

失败了。但是:

.when('/list/',{
  controller : function(){
     new Firebase('https://XXX.firebaseio.com/test/').push('Hey!');
  },
  templateUrl : 'template/list.stache'
})

按预期工作。

请注意,这两种方法都可以在浏览器中正常工作(在 firefox 和 chrome 上测试)。仅在使用 phonegap 编译到 android 应用程序时才会失败。

感谢任何想法。

【问题讨论】:

  • 如何在 Android 上失败?此处的精度将有助于理解错误和用例。如果它没有远程发送数据,我们可以检查的地方会出现错误。
  • 这就是问题所在,它没有给出任何错误,我不得不退回到在控制器中调用 fb,这对于 ux 来说有点不方便。返回的对象(来自 resolve)具有所有方法($save() 等)的主要问题,但是每当您尝试调用它们中的任何一个时,您都可以看到本地数据的更改,但看不到远程

标签: firebase angularfire


【解决方案1】:

我也有同样的事情。连接丢失。

使用函数Firebase.goOffline();Firebase.goOnline();。这允许您手动控制客户端连接。

例子:

var usersRef = new Firebase('https://samplechat.firebaseio-demo.com/users');
Firebase.goOffline(); // All Firebase instances are disconnected
Firebase.goOnline(); // All Firebase instances automatically reconnect

Link for reference

【讨论】:

    猜你喜欢
    • 2015-06-24
    • 2019-07-21
    • 2017-08-10
    • 1970-01-01
    • 2017-12-13
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多