【问题标题】:Why won't local Firebase document delete function work while served version does?为什么本地 Firebase 文档删除功能不起作用而服务版本起作用?
【发布时间】:2019-07-02 18:25:31
【问题描述】:

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

这是我的 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
}

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

我的本​​地Node版本是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
}

【问题讨论】:

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


    【解决方案1】:

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

    另外,您使用的是稍微过时的 firebase-admin 版本。尝试升级它。

    【讨论】:

    • 这就是问题所在。通过返回 doc.ref.delete() 然后在函数结束时 await(ing) 结果,它处理了它。我还能够在 const response = await sessionRef 处删除等待。这是多余的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 2022-07-01
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多