首页 > 解决方案 > 谷歌云功能永远运行

问题描述

大家好,我正在尝试使用 Google Cloud Scheduler 触发云功能,但是当我运行该作业时,它将永远运行。

我有一个包含用户数据的实时数据库,他们有 2 个布尔值,当我运行云函数时,这个布尔值更改为 false 没关系,但是当我再次更改为 true 时,该函数永远不会停止,立即更改为 false,我不知道为什么。这是我的 cron 配置 0 1 * * * 这是我的代码:

'use strict';
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

var db = admin.database();
exports.DailyResets = functions.https.onRequest((req, res) => {

    var usersRef = db.ref("users");
    return usersRef.orderByValue().on("value", function (snapshot) {
        snapshot.forEach(function (data) {
            console.log("Usuario: " + data.val().nombre + " Cupon" + data.val().Cupon);
            var hopperRef = usersRef.child(data.key.toString());
            hopperRef.update({
                "Cupon": false,
                "DailyGift": false
            });

        });
    });


});

我的功能没问题,但永远运行

标签: node.jsgoogle-cloud-platformgoogle-cloud-functions

解决方案


on()方法不返回承诺。您可能正在寻找once()

exports.DailyResets = functions.https.onRequest((req, res) => {

    var usersRef = db.ref("users");
    return usersRef.orderByValue().once("value", function (snapshot) {
        snapshot.forEach(function (data) {
            console.log("Usuario: " + data.val().nombre + " Cupon" + data.val().Cupon);
            var hopperRef = usersRef.child(data.key.toString());
            return hopperRef.update({
                "Cupon": false,
                "DailyGift": false
            });
        });
    });
});

您会注意到我还在return调用中添加了一个hopperRef.update(,否则该函数可能会在数据库更新之前结束。


推荐阅读