私はチャットアプリケーションを作るために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イベントでそれを扱うことにより、ショートカットを見つけます。
あなたはJavascriptを約束していない角度約束を使用している理由は、私が使用する可能性?あなたのデバイスはAndroidのどのバージョンで動作していますか? – Dexter
私はAngular Promiseがあることを知りませんでしたが、確かにそれを見るでしょう。 そして、私はこのコードをアンドロイドkitkatでテストしました(正確にはバージョンは正確ではありません)。 ありがとうございます。素晴らしい一日を^ ^ – seyahdoo