编辑:深入研究指南并遵循Doug的回答后,我尝试编辑代码,但仍然无法使其正常工作。
这是我的新代码(index.ts
):
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
admin.initializeApp(functions.config().firebase);
const db = admin.firestore();
export const createUser = functions.auth.user().onCreate((user)=>{
const newUser = new MyUser(user.uid, "Friend","", new Array, Array("en"),0,0,0 )
return db.doc("users/"+user.uid).set({newUser});
});
class MyUser{
uid: String;
first_name: String;
last_name: String;
communities_list: Array<string>;
lang_list: Array<string>;
reputation: Number;
join_date: Number;
last_activity: Number;
constructor(uid:string, first_name:string, last_name:string, communities_list:Array<string>, lang_list:Array<string>, reputation:Number, join_date:Number, last_activity:Number) {
this.uid = uid;
this.first_name = first_name;
this.last_name = last_name;
this.communities_list = communities_list;
this.lang_list = lang_list;
this.reputation = reputation;
this.join_date = join_date;
this.last_activity = last_activity;
}
}
我是TypeScript和Cloud Functions的新手。 我尝试创建的两个测试是一个由auth触发器触发的测试,另一个是由创建新文档触发的测试。两种操作的结果都应该是对数据库的写操作,但实际上都不会发生写操作。
有人可以看到我的代码中的问题是什么吗? 另外,您可以调试云功能吗?我怎么知道我的代码失败了?
这些是我的功能:
import * as functions from 'firebase-functions';
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const db = admin.firestore();
exports.createUser = functions.auth.user().onCreate((user)=>{
const userMap = new Map;
userMap.set("uid", user.uid);
userMap.set("first_name", "Friend");
userMap.set("last_name", "");
userMap.set("communities_list", new Array);
userMap.set("lang_list", new Array("sdsdf"));
userMap.set("reputation", 0);
userMap.set("join_date", 0);
userMap.set("last_activity", 0);
db.doc('users/'+user.uid).set({userMap});
});
exports.newIndiceAlgolia = functions.firestore.document('communities/{newCommunity}').onCreate((snap, context) => {
const newValue = snap.data();
if (newValue != null){
const objectID = newValue.objectID;
const title = newValue.title;
const description = newValue.description;
const members = 0;
const map = new Map;
map.set("objectID", objectID);
map.set("title", title);
map.set("description", description);
map.set("members", members);
db.doc('check_function/jjjj').set({map});
}
});
export const helloWorld = functions.https.onRequest((request, response) => {
response.send("Hello from Firebase!");
});
第三个只是示例,它是在首次创建文档时就存在的,因此我将其保留为支票,并且效果很好。
答案 0 :(得分:0)
尝试
export const newIndiceAlgolia
因为您的代码具有2种不同的导出样式。
exports.newIndiceAlgolia
export const helloWorld
firebase控制台内部有一个日志标签。
答案 1 :(得分:0)
您将忽略对Firestore的所有异步调用中的所有承诺。为了为Cloud Functions编写有效的代码,您绝对需要了解JavaScript的诺言如何工作,因为Cloud Functions要求您返回一个诺言,该诺言只有在您的函数中所有异步工作完成后才能解决。如果您不这样做,那么您的工作可能会中断而无法完成。
根据您的情况,至少可以在正在执行的每个数据库操作之前放置一个return
:
return db.doc('check_function/jjjj').set({map});
return db.doc('users/'+user.uid).set({userMap});
您还将发现TypeScript Map对您不起作用。您将需要使用带有属性的普通JavaScript对象,以便将数据添加到Firestore。在TypeScript中,Map是一个特殊的集合,Firebase SDK不支持。