reactjs - 反应原生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;
};
解决方案
要获得预期的结果,请尽量不要使用侦听器,因为您要返回数据。您只需要获取一次数据,因此我们使用.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
函数。
推荐阅读
- json - 如何在Angular 7中忽略序列化为JSON的属性
- c# - 实体框架搜索具有泛型的多列
- java - Firebase PhoneAuth.如何使用密码登录
- dart - 库 dart:convert 不导出显示名称为“UTF8”的成员
- python - 第一个请求没有终止(没有 FIN)uWSGI + nginx
- c# - Unity 2D - 跳跃动画重置
- r - R中的插入符号包未预测所有类时的混淆矩阵
- php - WordPress 如何创建自定义(简历)页面 url slug + author id slug
- java - 将同一个 jHipster 项目从单体项目迁移到微服务项目的 jHipster 方法是什么?
- json - 如何将主键值从 JsonResponse 传递到 Django 中的动态 url?