【问题标题】:Ionic with Firebase database Ref called multiple timesIonic 与 Firebase 数据库 Ref 多次调用
【发布时间】: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


    【解决方案1】:

    你说得对,它就像一个可观察的对象,每次更改值时都会触发它。要确保它只运行一次,请使用once('value')。 更多信息:https://firebase.google.com/docs/database/web/read-and-write#read_data_once

    offsetRef.once("value").then((snapshot) => {
        // cod will be executed once here
    });
    

    【讨论】:

      猜你喜欢
      • 2020-05-05
      • 1970-01-01
      • 2020-03-31
      • 1970-01-01
      • 2017-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-08
      相关资源
      最近更新 更多