为什么提供版本时本地Firebase文档删除功能不起作用?

时间:2019-07-02 18:25:31

标签: node.js firebase google-cloud-firestore

我有一个Firebase Node.js后端,该后端使用> firebase serve(用于初步开发)在本地部署和运行。我能够在本地添加和更新文档(使用Postman模拟外部REST API)。在Firebase服务器上也是如此。 不起作用的是我在本地运行时的删除文档例程。在Google的服务器版本上运行时,它们可以正常工作。 (请注意。当我运行Node的早期8.x版本时,删除例程在本地运行。

这是我的package.json

{
  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "scripts": {
    "lint": "eslint .",
    "serve": "firebase serve --only functions",
    "shell": "firebase functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "engines": {
    "node": "10"
  },
  "dependencies": {
    "actions-on-google": "^2.7.0",
    "firebase-admin": "^8.0.0",
    "firebase-client": "0.1.1",
    "firebase-functions": "^3.0.2",
    "moment": "^2.24.0",
    "request-promise-native": "^1.0.7",
    "sprintf-js": "^1.1.2",
    "twilio": "^3.32.0"
  },
  "devDependencies": {
    "eslint": "^5.12.0",
    "eslint-plugin-promise": "^4.0.1",
    "firebase-functions-test": "^0.1.6"
  },
  "private": true
}

我的本​​地环境是Windows7。我正在使用Postman调用本地和服务版本,两者的日志相同,没有显示错误。

我的本​​地节点版本是v10.16.0

最后是我的删除例程。

'use strict'
const functions = require('firebase-functions')
var firebaseClient = require('firebase-client')
var moment = require('moment');

const serviceAccount = require("./myconfiguration Info");
const admin = require('firebase-admin');
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "my db url"
});
var db = admin.firestore()
db.settings({ timestampsInSnapshots: true })
var sessionRef = db.collection('Sessions')

exports.clearSessions = async function(){
  const response = await sessionRef.get().then(snapshot=>{
    snapshot.forEach((doc=>{
      if (doc.exists){
        doc.ref.delete()
      }
    }))
    return true
  }).catch(err=>{
    console.error(err)
    console.log('return false')
    return false
  })
  console.log(response)
  return response
}

1 个答案:

答案 0 :(得分:1)

我不确定这是否是问题,但是您忽略了delete()返回的承诺。 clearSessions将在解决之前返回。您不清楚谁的代码调用clearSessions或之后发生了什么,但是如果您的程序在返回后终止,则工作可能无法完成。如果您打算从云函数中调用此函数,那么如果没有考虑到承诺,几乎可以肯定在该函数终止之前不会完成工作。

此外,您使用的是Firebase-admin的过时版本。尝试升级它。