我正在制作我的第一个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,而且我很缺乏经验。
答案 0 :(得分:3)
我认为旧浏览器根本不支持它,如here所示。根据我的经验,使用Angular自己的Promises实现可以很容易地解决这个问题,如下所示:
$q
您可以在documentation中找到有关new Promise
服务的更多信息。因此,在您的代码中,如果您要将$q
替换为realloc
并确保将其定义为依赖项,那么您应该很高兴。