2016-06-17 5 views
1

私はチャットアプリケーションを作るためにionic + firebaseを使用しています。メッセージが電話に来るとき、それにはuidが付属しています。私はそのuidを使ってユーザにメッセージを表示する必要があります(username:messagetext)。しかし、firebaseからユーザ名を取得するには、時間がかかってしまいます。だから私はこれらのUIDをキャッシュする必要があります:ユーザー名のペア。システム私はウェブサイトとアンドロイドエミュレータで作品を書いた。しかし、私はそれを私のアンドロイド携帯電話にインストールしようとすると動作しません。ここにコードがあります。JavaScript PromiseがIonicフレームワークを使用してAndroid 4.4で動作しないのはなぜですか?

var uNameCache = {}; 
    function getUsername(uid) { 
    toastr.info("Fetching username for "+uid); 
    return new Promise(function(resolve, reject) { 
     toastr.info("Trying to fetch with a promise");//this is not showing on an actual android phone 
     if(uNameCache[uid]){ 
     //get from cache 
     toastr.info("get from cache"); 
     resolve(uNameCache[uid]); 
     }else{ 
     //get from firebase 
     toastr.info("get from firebase"); 
     firebase.database().ref('users').child(uid).once('value').then(function(snapshot) { 
      var username = snapshot.val().username; 
      uNameCache[uid] = username; 
      resolve(username); 
     }); 
     } 
     //resolve("High_Admin");  
     // reject ("Error!"); 
    }); 
    }; 

、ここで編集するこの

firebase.database().ref('channel_messages').child(channelid).on('child_added',function(snapshot){ 
    var msg = snapshot.val(); 
    toastr.info("message get"); 
    getUsername(msg.uid).then(function(username){ 
     toastr.info("username fetched!"); 
     msg.username = username; 
     $scope.messages.push(msg); 
     //todo if scrollplace down scroll down, else dont touch player is reading old messages. 
     $ionicScrollDelegate.$getByHandle('mainScroll').scrollBottom(); 
     $scope.$apply(); 
    }); 
    }); 

を使用するコードは次のとおりです。これはなぜ起こったか、私はまだわからないが、私はちょうど約束を削除し、firebaseイベントでそれを扱うことにより、ショートカットを見つけます。

+0

あなたはJavascriptを約束していない角度約束を使用している理由は、私が使用する可能性?あなたのデバイスはAndroidのどのバージョンで動作していますか? – Dexter

+0

私はAngular Promiseがあることを知りませんでしたが、確かにそれを見るでしょう。 そして、私はこのコードをアンドロイドkitkatでテストしました(正確にはバージョンは正確ではありません)。 ありがとうございます。素晴らしい一日を^ ^ – seyahdoo

答えて

0

これは、古いバージョンのAndroidではJavaScriptの約束がサポートされていないためです。そのようなことはthis websiteで確認できます。

大きな違いは、角度プロミスは$qと呼ばれていますが、それ以外の多くの違いに気付かないことです。 にそれに関するさらに多くの情報があります。あなたのコードで

、あなたが依存して変化として$qを注入する必要があります。これに

return new Promise(function(resolve, reject) { 

return $q(function(resolve, reject) { 
関連する問題