簡體   English   中英

調用firestore collection()在博覽會上不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM