使用云函数在Firestore文档上编写(使用react.js)

时间:2018-08-11 07:20:10

标签: javascript reactjs firebase google-cloud-firestore google-cloud-functions

这是我的云功能代码。

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中有一条记录,说明该函数执行良好。但是我找不到任何新文档。 我希望能得到一些帮助。

1 个答案:

答案 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/