【发布时间】:2019-06-08 20:15:04
【问题描述】:
我正在向 Firebase 发送图像。一切都成功了,我可以将图像上传到 firebase 存储。但是在我成功之后,我的代码突然又发出了一次错误。顺便说一下,我记录了一些数字以查看发生了什么,我在控制台上得到了“1,2,3,4 then success and then failed error” .如何在不出错的情况下上传图片?我可以上传,但我现在也收到错误..提前谢谢你.. 错误消息说:“传播不可迭代实例的尝试无效”。
export const uploadPhoto = (uri, contentType = 'image/jpeg') => {
return async dispatch => {
try {
console.log('1');
const userId = firebase.auth().currentUser.uid;
const photoId = await uniqueIdGenerator();
dispatch({ type: UPLOAD_START });
console.log('2');
const snapshot = await firebase.storage().ref()
.child(`/photos/${userId}`)
.child(photoId)
.put(uri, { contentType });
console.log('3');
await firebase.firestore()
.collection('users').doc(userId)
.collection('photos').doc(photoId)
.set({ url: snapshot.downloadURL });
console.log(snapshot.downloadURL);
console.log('4');
await dispatch({ type: UPLOAD_SUCCESS, payload: snapshot.downloadURL });
console.log('5');
Actions.pop();
console.log('6');
}
catch (error) {
dispatch({ type: UPLOAD_FAILED });
console.log(error.message);
}
}
}
这是我的减速器:
const INITIAL_STATE = {
data: [],
loading: false
}
export default (state = INITIAL_STATE, { type, payload }) => {
console.log('reducerState', state);
console.log('type,payload', type, payload);
switch (type) {
case UPLOAD_START:
return { ...state, data: payload, loading: true }
case UPLOAD_SUCCESS:
console.log('succesa girdi');
return { ...state, data: [...state.data, payload], loading: false }
case UPLOAD_FAILED:
return { ...state, data: payload, loading: false }
case GET_PHOTOS_START:
return { ...state, data: payload, loading: true }
case GET_PHOTOS_SUCCESS:
return { ...state, data: payload, loading: false }
case GET_PHOTOS_FAILED:
return { ...state, data: payload, loading: false }
default:
return state;
}
}
编辑
我通过从我的 Firebase 存储中删除所有虚拟数据来解决问题。我使用模拟器来测试我的应用程序,并且一次又一次地使用相同的照片。很可能相同的照片会导致问题,因为我没有更改我的应用程序中的任何其他内容,但现在运行良好。
【问题讨论】:
-
确切的错误信息是什么
-
对不起,我忘了添加它。消息说:“传播不可迭代实例的尝试无效”
-
你的 UPLOAD_SUCCESS 在做什么,能发一下吗
-
嘿,我刚刚添加了减速器。顺便说一句,我使用 UPLOAD_SUCCESS 将我的照片网址发布到减速器。
标签: javascript reactjs firebase react-native redux