【问题标题】:react native firebase how to make query synchronous反应原生firebase如何使查询同步
【发布时间】:2021-05-30 10:25:52
【问题描述】:

我正在使用一个函数来查询 firebase 实时数据库并获取所需的信息。信息存储在一个返回的数组中。

挑战在于该函数甚至在数据库获取记录之前就返回了数组,因此我得到了空结果。因为我需要使用 .on 来获取多条记录,所以我不能在查询中使用 .then。

如何确保在查询完全执行后返回 va_addresses。

const getAddressLabel = (vp_userid) => {
    let vo_obj;
    let va_addresses = [];

    firebase
        .database()
        .ref("address/" + vp_userid)
        .orderByKey()
        .on("child_added", function (snapAddress) {
            vo_obj = {
            label: snapAddress.val().addresslabel,
            value: snapAddress.val().addresslabel,
            };
            va_addresses.push(vo_obj);
        });
    return va_addresses;
};

【问题讨论】:

标签: reactjs firebase native synchronous


【解决方案1】:

要获得预期的结果,请尽量不要使用侦听器,因为您想返回数据。您只需要获取一次数据,因此我们使用.once('value')

const getAddressLabel = async (vp_userid) => {
  let vo_obj;
  let va_addresses = [];

  const snapAddress = await firebase
    .database()
    .ref("address/" + vp_userid)
    .orderByKey()
    .once("value");

  vo_obj = {
    label: snapAddress.val().addresslabel,
    value: snapAddress.val().addresslabel,
  };

  va_addresses.push(vo_obj);

  return va_addresses;
};

在使用getAddressLabel 时要小心,因为它现在将是async 函数。

【讨论】:

  • 感谢您的建议。我不得不使用 .on 因为这个查询获取多条记录。如果我使用 .once,我想它只会捕获第一行。
  • .on 是一个监听器。当数据发生变化时,她会给你实时更新。 .once 可以一次性获取数据,但它会为您提供所有数据。唯一的区别是一个是现场监听器,另一个获取数据一次。
猜你喜欢
  • 1970-01-01
  • 2021-05-28
  • 1970-01-01
  • 2020-02-13
  • 1970-01-01
  • 1970-01-01
  • 2020-12-26
  • 2019-04-23
  • 1970-01-01
相关资源
最近更新 更多