这是我的云功能代码。
const admin = require('firebase-admin');
const functions = require('firebase-functions');
admin.initializeApp();
const db = admin.firestore();
exports.dbTest = functions.https.onCall((request, response) => {
var doc = db.collection('users').doc('TEST');
var data = doc.set({
name:'TEST'
});
});
这是客户端代码。我正在使用react.js前端。
var dbTest = firebase.functions().httpsCallable('dbTest');
dbTest()
.then(res=> {
console.log(JSON.stringify(res));
})
.catch(err=>{
console.log(err);
});
简单来说,它不起作用。 Log中有一条记录,说明该函数执行良好。但是我找不到任何新文档。 我希望能得到一些帮助。
答案 0 :(得分:2)
您必须在Cloud Function中返回一个承诺。
这应该有效:
const admin = require('firebase-admin');
const functions = require('firebase-functions');
admin.initializeApp();
const db = admin.firestore();
exports.dbTest = functions.https.onCall((request, response) => {
var doc = db.collection('users').doc('TEST');
return doc
.set({
name: 'TEST'
})
.then(() => {
return { result: 'document updated' };
})
.catch(function(error) {
console.error("Error writing document: ", error);
throw new functions.https.HttpsError('unknown', 'Error writing document:', error); //Adapt as you wish, see https://firebase.google.com/docs/reference/functions/functions.https.HttpsError
});
});
别忘了检查您的Firstore规则是否正确。
最后,我建议您观看Firebase视频系列中有关“ JavaScript承诺”的3个视频:https://firebase.google.com/docs/functions/video-series/