ich verwende ionic + firebase, um eine Chat-Anwendung zu erstellen. Wenn eine Nachricht zum Telefon kommt, kommt sie mit uid, ich muss den Benutzernamen mit dieser UID holen, um dem Benutzer die Nachricht zu zeigen (Benutzername: Nachrichtentext). Aber das Abrufen des Benutzernamens von Firebase benötigt Zeit (und Bandbreite). Also muss ich diese Benutzer-Paare zwischenspeichern. System Ich schrieb Werke auf der Website und Android-Emulator. Aber wenn ich versuche, es auf meinem Android-Handy zu installieren, funktioniert es nicht. Hier ist der Code.Warum funktioniert das JavaScript-Versprechen nicht auf Android 4.4 mit dem Ionic Framework?
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!");
});
};
und hier ist der Code, der diese
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();
});
});
bearbeiten verwendet: Ich bin immer noch nicht sicher, warum dies passiert ist, aber ich finde, eine Verknüpfung von nur Versprechen zu löschen und es auf Feuerbasis Ereignis handelt.
Kann ich, warum Sie die Javascript-Versprechen verwenden und nicht die Winkel Versprechen ? Und welche Version von Android läuft auf Ihrem Gerät? – Dexter
Ich wusste nicht, dass es Angular Promise gab, sicher wird das aussehen. Und ich habe diesen Code auf Android kitkat getestet (nicht wirklich sicher, welche Version genau) Danke für Infos. Habt einen schönen Tag ^^ – seyahdoo