2016-04-30 50 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); 
    }); 
} 

一切正常,在瀏覽器(Firefox,Chrome瀏覽器)的罰款,並同時部署到索尼Xpreria平板電腦採用Android 5.1.1。

當我部署到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,並確保將其定義爲依賴項,則應該很好。