首页 > 解决方案 > 反应原生firebase如何使查询同步

问题描述

我正在使用一个函数来查询 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;
};

标签: reactjsfirebasenativesynchronous

解决方案


要获得预期的结果,请尽量不要使用侦听器,因为您要返回数据。您只需要获取一次数据,因此我们使用.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函数。


推荐阅读