2016-04-30 3 views
2

私は最初のIonicアプリを作っている。その部分は約束を使用します。配備後の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); 
    }); 
} 

Android 5.1.1搭載のSony Xpreriaタブレットには、すべての機能がブラウザ(Firefox、Chrome)で正しく動作します。

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を使用すると、それだけで正常に動作します。何が間違っていますか? これは私の非常に最初の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に置き換えて、それを依存関係として定義していることを確認してください。