firebase.functions () не определен в React, в то время как firebase.firestore () может работать - PullRequest
0 голосов
/ 05 августа 2020

Итак, я работаю над проектом 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
    })

1 Ответ

0 голосов
/ 06 августа 2020

Ссылка this.functions = app.functions() указывает на коллекцию объектов. Указатель не удерживает функцию, потому что типы этих объектов не совпадают. В одной руке у вас есть одна сущность, а в другой - список объектов.

this.db может содержать app.firestore(), потому что тип этих свойств тот же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...