Итак, я работаю над проектом React, который использует Firebase для реализации множества функций. И теперь я пытаюсь использовать в нем некоторые вызываемые HTTPS-функции.
Но похоже, что способ импорта модуля 'firebase / functions' неправильный. И это дает мне эту ошибку:
TypeError: Cannot read property 'httpsCallable' of undefined
Ниже показано, как я выполняю импорт и настройку:
import app from 'firebase/app';
import 'firebase/auth';
import 'firebase/firestore';
import 'firebase/functions';
const config = {
// the config info here
};
class Firebase {
constructor() {
app.initializeApp(config);
this.auth = app.auth();
this.db = app.firestore();
this.functions = app.functions();
}
// trying to call the function
doCreatePlanner = this.functions.httpsCallable('createPlanner')
После применения совета Дуга:
Вы пытаетесь получить доступ к this.functions до того, как определили его в конструкторе. Чтобы избавиться от сообщения об ошибке, вы можете переместить вызов httpsCallable в конструктор:
Я сделал это:
class Firebase {
constructor() {
app.initializeApp(config);
this.auth = app.auth();
this.db = app.firestore();
// Get the callable function reference here
this.createPlannerCloudFunc = app.functions().httpsCallable('createPlanner')
}
doCreatePlanner = (input) => this.createPlannerCloudFunc(input)
И это работает!
Но я все еще немного запутался.
Разве конструктор не должен всегда вызываться первым при создании / использовании класса?
Итак, в функции doCreatePlanner this.functions
должно содержать app.functions()
, верно?
Я могу выполнять такую функцию в классе, где this.db
содержит app.firestore()
:
doUpdateRecord = (userRecord) =>
// create the user in firestore
this.db.collection(`users`).doc(userRecord.uid).set({
// record info here
})