Cordova / Phonegap + Angular:承诺在下一个消化周期之前不会解决

时间:2014-03-19 17:13:26

标签: angularjs cordova angularjs-scope promise

我在Cordova移动应用程序中使用Angular + JQMobile,我在承诺方面遇到了一些困难。我有一个cordovaReady服务,它返回一个承诺,我希望在承诺解决后隐藏一个闪屏(请不要讲课)。当我尝试使用if-then条件在不同时间解决promise时,就会出现这个伎俩。我的代码:

app.factory('cordovaReady', function($q) {
    var deferred = $q.defer();
    return {
        ready: function() {
                    document.addEventListener(
                        "deviceready",
                        function () {
                            deferred.resolve();
                        },
                        false
                    );
                    return deferred.promise;
                }
    }
});

app.run(['$rootScope', '$location', 'TagTemplates', 'cordovaReady', function($scope, $location, TagTemplates, cordovaReady) {
 // If there is a user logged in, --fire camera-- and go to tag template

  if ($scope.currentUser) {
    // fire camera here, make sure cordova is ready first.
    // alert('found user');
    var promise = cordovaReady.ready();
    promise.then(function() {
      // alert('about to capture');
      console.log('firing capture');
      $scope.captureImage();
      navigator.splashscreen.hide(); // this one fires.
    });

    console.log($scope.currentUser);
    $scope.templates = $scope.currentUser.attributes.templates[0];
    $scope.$apply();
    $location.url("/#main");

  } else {
    var promise = cordovaReady.ready();
    promise.then(function() {
      alert('no user logged in, hide splashscreen');
      navigator.splashscreen.hide(); // this one does not.
      $scope.$apply(); // even with this.
    });
  }
}

对于现有用户,会根据需要隐藏启动画面,我想是因为在此if语句中发生了范围更新。但是,如果没有现有用户,则在下一个摘要周期(点击我的应用程序中的按钮或链接)之前,不会触发启动画面。我用警报验证了这一点。

我已经尝试了各种范围的应用,包括具有0延迟的setTimeout变体等。

有什么想法吗?

感谢。

0 个答案:

没有答案