2016-04-30 2 views
2

Я делаю свое первое приложение для Ionic. Часть его использует обещания.Ионное приложение после развертывания дает ReferenceError: Promise не задано

Приведенный ниже пример иллюстрирует проблему. (В представлении у меня есть кнопка, которая запускает $ 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) и используется на планшете Sony Xpreria с Android 5.1.1.

Проблема начинается, когда я устанавливаю на дешевый планшет Woxter QX103 с Android 4.4.2. В этом случае, когда я пытаюсь запустить свою функцию она дает мне следующее сообщение об ошибке в консоли:

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 также с помощью обещаний, и она работает просто отлично. Что я делаю неправильно? Это мой самый первый javascript, и я довольно неопытный.

ответ

4

Я думаю, что он не поддерживается в старых браузерах, как показано на рисунке here. По моему опыту, это может быть легко решена с помощью собственной реализации угловых по обещаниям, которая выглядит следующим образом:

return $q(function(resolve, reject) { 
    setTimeout(function() { 
     if (okToGreet(name)) { 
     resolve('Hello, ' + name + '!'); 
     } else { 
     reject('Greeting ' + name + ' is not allowed.'); 
     } 
    }, 1000); 
    }); 

Вы можете найти более подробную информацию о $q службы в . Поэтому в вашем коде, если вы должны были заменить new Promise на $q и убедитесь, что вы определили его как зависимость, вам должно быть хорошо идти.

Смежные вопросы