【发布时间】:2017-10-31 04:15:13
【问题描述】:
我正在使用 Ionic3 和 AngularFire2 来与 Firebase 数据库交互。
我有以下代码:
ts
createMessage(chatItem: any, messageText: string): Promise<firebase.database.ThenableReference> {
let offsetRef: firebase.database.Reference = firebase.database().ref(".info/serverTimeOffset");
return new Promise<firebase.database.ThenableReference>((resolve) => {
offsetRef.on("value", (snap: firebase.database.DataSnapshot) => {
var offset = snap.val();
var negativeTimestamp = (new Date().getTime() + offset) * -1;
chatItem.readByReceiver = false;
if (chatItem && !chatItem.$key && chatItem.key) {
chatItem.$key = chatItem.key;
}
this.updateChat(chatItem);
let ref: firebase.database.ThenableReference = this.af.database.list('/message').push({
chatId: chatItem.$key,
memberId1: this.me.uid,
memberId2: this.you.uid,
username: this.me.displayName,
message_text: messageText,
timestamp: firebase.database.ServerValue.TIMESTAMP,
negativtimestamp: negativeTimestamp,
readByReceiver: false
});
resolve(ref);
});
});
}
这工作正常,并向 Firebase 数据库写入一条消息。但是,我注意到在发送一条消息并在数据库中创建后,大约 20 分钟后再次创建了一条新的但相同的消息。在代码中放置调试语句并等待它再次触发后,我注意到以下行导致代码执行多次:
offsetRef.on("value", (snap: firebase.database.DataSnapshot) => {
// breakpoint getting executed more than once here
});
我希望每次调用该函数时只执行一次。我认为offsetRef.on 的行为就像一个可观察的对象。
问题
确保代码只执行一次的最佳方法是什么?
谢谢。
【问题讨论】:
标签: angular firebase ionic-framework firebase-realtime-database ionic3