实时数据库在 Android 上没有给我 push().key,在 iOS 上可以正常工作
Posted
技术标签:
【中文标题】实时数据库在 Android 上没有给我 push().key,在 iOS 上可以正常工作【英文标题】:Realtime database doesn't give me the push().key on Android, works fine on iOS 【发布时间】:2021-07-27 14:08:37 【问题描述】:在 android 上,推送引用未定义,关键也是如此。在 ios 上运行良好。
我正在使用 react-native-firebase 11.0.0。
listKey 在第 4 行未定义。使用 push 命令将列表添加到数据库中,但由于我没有得到 listKey 的其余部分代码不起作用。如前所述,iOS 完全没有问题。从数据库中读取数据在 Android 上运行良好。
我试过了:
-
将 react-native-firebase 更新到 11.4.1,没有变化
将 repo 下载到另一个文件夹并在没有 package-lock.json 的情况下执行 npm install(在 package.json 中修复了 11.0.0)
const listPushRef = await listsRef.push( user: getUser(), name: listName );
给出一个错误,它无法在未定义的情况下运行 .then()。
有什么想法吗?
代码:
export const addList = async (listName, freeCategory) =>
const listsRef = database().ref(`lists`);
const listPushRef = listsRef.push( user: getUser(), name: listName );
const listKey = listPushRef.key;
const usersListsRef = database().ref(`users/$getUser()/lists`);
const usersLists = await usersListsRef.once('value').then(snapshot => snapshot.val() || []);
usersLists.push(listKey);
usersListsRef.set(usersLists);
const userRef = database().ref(`users/$getUser()`);
const user = await userRef.once('value').then(snapshot => snapshot.val());
const listConfigurations = user.listConfigurations || ;
listConfigurations[listKey] = [
id: freeCategory,
isCategory: true,
compareTo: [],
,
];
userRef.update( listConfigurations );
return listKey;
;
【问题讨论】:
Pssst 应该等待吗?一些浏览器会很好地使用此规则,但如果它未定义,则可能没有返回承诺并且您跳过了它?其他浏览器对此表现正常吗? 尝试在 listsRef 上运行 console.log 并确定它是否在 android 中及时定义或尝试在它前面等待? :O 我已经尝试在它前面等待,我应该列出它。我收到“无法在未定义的情况下运行 .then()”或类似信息。当我 console.log listKey 它是未定义的,当我 console.log listPushRef 它是一个未解决的承诺。 是否定义了数据库?似乎这里没有承诺什么,到目前为止它可能不在这个函数中 列表被写入数据库,所以我认为它是。如果那里有问题,我可以检查一下。 【参考方案1】:为了将来参考,我没有太多时间花在这上面,所以我不得不通过创建自己的密钥来解决这个问题。
所以我没有使用listPushRef.key
,而是生成了一个UUID。不是最佳的,但它有效。
【讨论】:
以上是关于实时数据库在 Android 上没有给我 push().key,在 iOS 上可以正常工作的主要内容,如果未能解决你的问题,请参考以下文章
用于登录Android Studio的实时firebase数据库上的空指针异常[重复]
用于 Firebase 实时数据库/Firebase 身份验证的 Android 唯一密钥