部署后的Ionic app给出ReferenceError:未定义Promise

时间:2016-04-30 08:22:06

标签: javascript android cordova ionic-framework

我正在制作我的第一个Ionic应用程序。它的一部分使用了承诺。

下面的例子说明了这个问题。 (在视图中我有一个按钮,它启动$ scope.test,执行testProm()函数)。

angular.module('myApp.controllers', [])

.controller('DashCtrl', function($scope, $state) {
  $scope.test = function() {
    testProm();
  }
});

function testProm() {
  console.log('1. Function testProm starting...');
  return new Promise(function(resolve, reject) {
    console.log('2. Hi from Promise');
    var something = ' Some text ';
    resolve(something);
  }).then(function(something) {
    console.log('3. Hi again. Something is: ' + something);
  });
}

在浏览器(Firefox,Chrome)中使用Android 5.1.1部署到索尼Xpreria平板电脑时,一切正常。

当我使用Android 4.4.2部署到便宜的Woxter QX103平板电脑时,问题就出现了。 在这种情况下,当我尝试运行我的功能时,它会在控制台中出现以下错误:

ReferenceError: Promise is not defined
    at testProm (file:///android_asset/www/js/controllers.js:825:14)
    at Scope.$scope.test (file:///android_asset/www/js/controllers.js:29:5)
    at fn (eval at <anonymous> (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:26457:15), <anonymous>:4:203)
    at file:///android_asset/www/lib/ionic/js/ionic.bundle.js:62386:9
    at Scope.$eval (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:29158:28)
    at Scope.$apply (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:29257:23)
    at HTMLButtonElement.<anonymous> (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:62385:13)
    at HTMLButtonElement.eventHandler (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:16583:21)
    at triggerMouseEvent (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:2948:7)
    at tapClick (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:2937:3) 

奇怪的是,我使用CouchDB也使用了promises,它运行得很好。我做错了什么? 这是我的第一个javascript,而且我很缺乏经验。

1 个答案:

答案 0 :(得分:3)

我认为旧浏览器根本不支持它,如here所示。根据我的经验,使用Angular自己的Promises实现可以很容易地解决这个问题,如下所示:

$q

您可以在documentation中找到有关new Promise服务的更多信息。因此,在您的代码中,如果您要将$q替换为realloc并确保将其定义为依赖项,那么您应该很高兴。