首页 > 解决方案 > 使用云功能(使用 react.js)在 Firestore 文档上编写

问题描述

这是我的云功能代码。

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

标签: javascriptreactjsfirebasegoogle-cloud-firestoregoogle-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');
    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
       });

});

最后,我建议您观看 Firebase 视频系列中关于“JavaScript Promises”的 3 个视频:https ://firebase.google.com/docs/functions/video-series/


推荐阅读