Я пытаюсь обновить поле моей базы данных firebase следующим кодом:
//delete user token
delete_user_device_token() {
let ref = this.afDatabase.database.ref("users/" + this.afAuth.auth.currentUser.uid + "/chats");
let groups = this.afDatabase.database.ref("users/" + this.afAuth.auth.currentUser.uid + "/groups");
let data = {};
groups.once("value").then(snapshot => {
snapshot.forEach(group => {
data["groups/" + group.key + "/users/" + this.afAuth.auth.currentUser.uid + "/device_token"] = null;
})
this.afDatabase.database.ref().update(data);
console.log("1")
})
ref.once("value").then(snapshot => {
snapshot.forEach(chat => {
data["users/" + chat.key + "/chats/" + this.afAuth.auth.currentUser.uid + "/user/device_token"] = null;
})
this.afDatabase.database.ref().update(data);
console.log("2")
})
data["users/" + this.afAuth.auth.currentUser.uid + "/device_token"] = null;
console.log("3")
return this.afDatabase.database.ref().update(data);
}
Однако коды внутри цикла foreach не выполняются при вызове:
this.firebaseProvider.delete_user_device_token().then(() => {
//logout
this.authProvider.logout().then(() => {
//toaster
this.toastCtrl.create({
message: 'You have been logged out',
duration: 3000
}).present();
});
});
Результатв журнале консоли:
3
Как видите, работает только последнее обновление внутри delete_user_deivce_token, и я могу подтвердить это внутри базы данных, код внутри снимка foreach не выполняется, я посмотрел онлайн иКажется, я могу исправить это с помощью Promise.all, но я не уверен, как я могу реализовать это в моем коде.