【发布时间】:2023-03-10 03:09:01
【问题描述】:
在 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 它是一个未解决的承诺。
-
是否定义了数据库?似乎这里没有承诺什么,到目前为止它可能不在这个函数中
-
列表被写入数据库,所以我认为它是。如果那里有问题,我可以检查一下。
标签: javascript android firebase react-native-firebase