因此,我正在进行一个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')
应用Doug的建议后:
在构造函数中定义this.function之前,您正试图访问它。为了消除错误消息,您可以将对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
})
引用this.functions = app.functions()
指向一组对象。指针不包含函数,因为这些对象的类型不相同。一方面你有一个单一的实体,另一方面你也有一个对象列表。
this.db
可以容纳app.firestore()
,因为这些属性的类型是相同的。