NodeJS 我想用firebase函数重写集合中的所有文档

68de4m5k  于 2022-12-26  发布在  Node.js
关注(0)|答案(1)|浏览(133)

我正在flutter中开发一个应用程序。我想在东京时间00:00将Firestore的“users”集合中所有文档的“life”字段的值重写为“10(int)”。无论如何,我设法编写了代码,但我对JavaScript和函数一无所知,所以它无法工作。我想知道如何更正它。这是我的代码。

const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();

process.env.TZ = "Asia/Tokyo";

export const checkTimezone = functions.region('asia-northeast1').https.onRequest(async (req, res) => {
  console.info(process.env.TZ)
});

exports.timer = functions.pubsub.schedule('00***').onRun((context) => {
    functions.logger.info("timer1 start", {structuredData: true});
    admin.firestore().collection("users").get().then(function(querySnapshot){
        querySnapshot.forEach(function(doc){
            doc.ref.update({
                life:10
            });
        });
    })
});
thigvfpy

thigvfpy1#

云函数的默认时区为America/Los_Angeles。您可以将时区设置为Asia/Tokyo,这样函数将在日本的每个午夜运行。此外,您必须从函数返回一个承诺,在更新完成后终止它。请尝试重构代码,如下所示:

const functions = require("firebase-functions");
const admin = require("firebase-admin");

admin.initializeApp();
const db = admin.firestore();

exports.timer = functions.pubsub
  .schedule("0 0 * * *")
  .timeZone("Asia/Tokyo")
  .onRun((context) => {
    functions.logger.info("timer1 start", {structuredData: true});

    const usersRef = db.collection("users");

    return usersRef.get().then((snapshot) => {
      const promises = [];

      snapshot.forEach((doc, i) => {
        promises.push(doc.ref.update({ life: 10 }));
      });

      return Promise.all(promises);
    });
  });

相关问题