【发布时间】:2019-10-07 12:36:20
【问题描述】:
我正在使用 Firebase 函数来读取 Redux 操作中的数据。问题是该函数没有等待 Firebase 函数的响应。您可以在下面看到所有功能代码。如何设置第二个 firebase 函数等待响应?
export const getSelectedGroupDetail = groupUid => dispatch => {
dispatch({
type: GET_SELECTED_GROUP_DETAIL_START,
});
firebase
.database()
.ref('/groups/' + groupUid)
.once('value')
.then(function (snapshot) {
const membersList = _.map(snapshot.val().members, (val, uid) => ({ ...val, uid }));
let groupMembersList = _.map(selectedGroupData.members, (val, uid) => {
return { ...val, uid };
});
for (let index = 0; index < groupMembersList.length; index++) {
firebase.database().ref('/users/' + groupMembersList[index].uid).once('value')
.then(function (snapshot) {
let name = snapshot.val().displayName;
groupMembersList[index] = { ...groupMembersList[index], name };
})
.catch(e => console.log(e.message));
}
const yeniGrupDetayi = { ...snapshot.val(), uid: groupUid, membersList };
console.log('ACTION NE YAZDI ? ===>', yeniGrupDetayi);
dispatch({
type: GET_SELECTED_GROUP_DETAIL_SUCCESS,
payload: yeniGrupDetayi,
});
NavigationService.navigate('GroupDetail');
})
.catch(e => {
dispatch({
type: GET_SELECTED_GROUP_DETAIL_FAIL,
});
Alert.alert('Hata', 'Beklenmedik bir hata meydana geldi.');
});
};
如果第二个 Firebase 函数将等待响应,memberList 将在 yeniGrupDetayi 对象内。如果第二个 Firebase 函数将等待响应,membersList 将在 yeniGrupDetayi 对象内。在操作代码的最后,FlatList 正在运行,但我在 FlatList 中看不到membersList。
【问题讨论】:
-
你想让你的程序等待
firebase.database().ref('/users/' + groupMembersList[index].uid).once('value')行执行吗? -
@AsimHashmi 是的先生。
-
只需将您的代码放在您正在等待的 firebase 调用的 .then() 中
-
看了很久才发现一个问题。 Array 中的某些对象不使用“name”键。第一个奇怪的数据是名称,接下来的5个数据丢失了,然后又出现了。全都一样。您可以在链接上的照片中看到问题。什么原因? ibb.co/SJvBhb6ibb.co/jvDFq2k
标签: firebase react-native firebase-realtime-database google-cloud-functions