Ionic 与 Firebase 数据库 Ref 多次调用

理查德

我正在使用 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我认为它的行为就像一个可观察的对象。

问题

确保代码只执行一次的最佳方法是什么?

谢谢你。

叶夫根

你是对的,它就像一个 observable 一样,每次值改变时都会被触发。要确保它只运行一次,请使用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
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Ionic + Firebase - 实时数据库不更新视图

来自分类Dev

PHP数据库连接-多次调用

来自分类Dev

Firebase可调用函数读取实时数据库

来自分类Dev

Firebase RTDB`ref.once()`被多次执行

来自分类Dev

获取 Firebase 数据库 Ionic 3 中节点的最后一个值

来自分类Dev

为什么 Ionic App 在引号中打印出 firebase 数据库值

来自分类Dev

如何在Ionic框架(AngularJS)中使用JavaScript从数据库调用数据到首页

来自分类Dev

在 ionic 3 中从 firebase 获取数据后调用 then 函数

来自分类Dev

多次调用数据库无法正常工作

来自分类Dev

FIREBASE致命错误:数据库已多次初始化

来自分类Dev

Firebase 项目在数据库更改时在集合视图中多次返回

来自分类Dev

Firebase JS:对嵌套数据进行迭代的数据库调用

来自分类Dev

来自 firebase 数据库调用的数组记录正确的数据,但长度显示为 0

来自分类Dev

多次收听同一个Firebase ref的性能

来自分类Dev

Firebase数据库复制

来自分类Dev

了解Firebase数据库

来自分类Dev

Firebase数据库结构

来自分类Dev

Firebase 数据库结构

来自分类Dev

构建 firebase 数据库

来自分类Dev

Firebase 数据库安全

来自分类Dev

访问 Firebase 数据库

来自分类Dev

反应 Firebase 数据库

来自分类Dev

ngFor循环继续执行并使用Firebase数据库在Ionic 3中使应用程序崩溃

来自分类Dev

Firebase 和 Ionic 1.x - 无法一次向数据库添加多个对象

来自分类Dev

Firebase数据库-从数据库检索数据

来自分类Dev

每次将子级添加到firebase数据库时,都会调用viewDidLoad

来自分类Dev

如何安全地解开我从 Firebase 中的数据库调用的这个可选 URL?

来自分类Dev

尝试在空对象引用 .child() Firebase 数据库上调用虚拟方法

来自分类Dev

如何更改引用的 Firebase Cloud Function onCreate 调用的数据库 url?

Related 相关文章

  1. 1

    Ionic + Firebase - 实时数据库不更新视图

  2. 2

    PHP数据库连接-多次调用

  3. 3

    Firebase可调用函数读取实时数据库

  4. 4

    Firebase RTDB`ref.once()`被多次执行

  5. 5

    获取 Firebase 数据库 Ionic 3 中节点的最后一个值

  6. 6

    为什么 Ionic App 在引号中打印出 firebase 数据库值

  7. 7

    如何在Ionic框架(AngularJS)中使用JavaScript从数据库调用数据到首页

  8. 8

    在 ionic 3 中从 firebase 获取数据后调用 then 函数

  9. 9

    多次调用数据库无法正常工作

  10. 10

    FIREBASE致命错误:数据库已多次初始化

  11. 11

    Firebase 项目在数据库更改时在集合视图中多次返回

  12. 12

    Firebase JS:对嵌套数据进行迭代的数据库调用

  13. 13

    来自 firebase 数据库调用的数组记录正确的数据,但长度显示为 0

  14. 14

    多次收听同一个Firebase ref的性能

  15. 15

    Firebase数据库复制

  16. 16

    了解Firebase数据库

  17. 17

    Firebase数据库结构

  18. 18

    Firebase 数据库结构

  19. 19

    构建 firebase 数据库

  20. 20

    Firebase 数据库安全

  21. 21

    访问 Firebase 数据库

  22. 22

    反应 Firebase 数据库

  23. 23

    ngFor循环继续执行并使用Firebase数据库在Ionic 3中使应用程序崩溃

  24. 24

    Firebase 和 Ionic 1.x - 无法一次向数据库添加多个对象

  25. 25

    Firebase数据库-从数据库检索数据

  26. 26

    每次将子级添加到firebase数据库时,都会调用viewDidLoad

  27. 27

    如何安全地解开我从 Firebase 中的数据库调用的这个可选 URL?

  28. 28

    尝试在空对象引用 .child() Firebase 数据库上调用虚拟方法

  29. 29

    如何更改引用的 Firebase Cloud Function onCreate 调用的数据库 url?

热门标签

归档