[英]Call to firestore collection() not working on expo
使用:通過expo響應本機
react-redux:5.0.6
redux:3.7.2
火力地堡:4.9.0
(請參閱以下修復程序:降級為Firebase 4.6.2)
更新:這是一個更長的問題,因為人們懷疑redux在firebase上不能很好地工作。 但這似乎並非如此。 只保留相關部分
這是一個與redux掛鈎的動作創建者。 在此處使用firebase.auth().signInWithEmailAndPassword()
,一切正常。
action.js
import firebase from 'firebase'
import 'firebase/firestore'
export const dataFetch = () => {
return (dispatch) => {
firebase.auth().signInWithEmailAndPassword('a@b.com', 'passw')
.then(
(result => dispatch({ type: 'DATA_FETCH_SUCCESS', payload: result })),
(() => alert("got here"))
)
.catch((err) => alert(err))
}
};
但是,當使用firebase.firestore().collection(...).get()
,執行不會進入then()
部分內-無法在其中記錄任何內容。
import firebase from 'firebase'
import 'firebase/firestore'
export const dataFetch = () => {
return (dispatch) => {
firebase.firestore().collection('MyCollection').get()
.then(
(result => dispatch({ type: 'DATA_FETCH_SUCCESS', payload: result })),
(() => alert("got here"))
)
.catch((err) => alert(err))
}
};
可能是什么問題? 是否有通過收集路徑的特定方法? Firebase配置不正確嗎? 我仔細檢查了所有看起來正確的內容。 我正在為Web應用程序使用配置。 有沒有專門針對Firestore的東西?
我的Firebase配置中有以下鍵:
apiKey: '', // Auth / General use
authDomain: '', // Auth with popup/redirect
databaseURL: '', // Realtime Database
storageBucket: '', // Storage
messagingSenderId: '',// Cloud Messaging
projectId: '', // Firestore
好的,所以經過大量搜索后發現,這是與Firestore無法與EXP配合使用的問題! (問題標題的更新反映了這一點)。
尚無穩定的解決方案,但其他人都遇到了此問題,這里有一種解決方法,請檢查Igor的回答: 在使用Firestore權限(通過Expo)響應本機應用程序中-request.auth始終為null
這個問題在React Native中存在,並在這里進行了討論: https : //github.com/firebase/firebase-js-sdk/issues/283#issuecomment-345815579
希望它將很快成為正式版本。
僅供參考,我降級到Firebase 4.6.2,並替換了上面鏈接中提到的index.js文件,現在一切正常。
不太確定您的代碼中發生了什么,但是這種自調用功能似乎有點不合適? 重新格式化您的代碼,使其對自己更具可讀性。
如您所見,您忘記了在“結果”塊上用}結束+自調用功能沒有意義? 當您已經有一個catch塊時,為什么要嘗試在那里捕獲錯誤?
export const dataFetch = () => {
return (dispatch) => {
firebase.firestore().collection('MyCollection').get()
.then((result => {
dispatch({ type: 'DATA_FETCH_SUCCESS', payload: result }),
(() => { alert("got here"); })
)
.catch((err) => {
alert(err);
});
};
};
無論哪種方式,這都應該起作用:
export function dataFetch (){
const request = firebase.firestore().collection(`MyCollection`).get()
return (dispatch) => {
return request.then((result) => {
dispatch({ type: 'DATA_FETCH_SUCCESS', payload: result})
}).catch((error)=> {
console.log({error})
})
}
}
不知道您的signInWithEmailAndPassword如何以及是否真的起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.