Firebase 定时器功能

4 node.js firebase-realtime-database google-cloud-functions

我想在 firebase 云函数上创建一个倒计时器 我该如何制作?

我正在使用 firebase 使用 java 制作移动应用程序。我想在我的应用程序中添加一个计时器,向所有用户显示相同的时间。但在这个问题中我只想显示一个在数据库上计算时间的计时器

我怎样才能用firebase云功能 更新来制作这个计时器 我这样做了,但是cmd中有一个错误

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

    admin.initializeApp(functions.config().firebase);   

      exports.myCloudTimer = 
     functions.database.ref('/startTimerRequest/').onCreate((event) => {
return db.ref('cloudTimer/timeInMs').once('value', snap => {
    if (!snap.exists()) {
        return Promise.reject('time is not defined in the database.');
    }

    let timeInSeconds = snap.val() / 1000;
    console.log('Cloud Timer was Started: ' + timeInSeconds);

    return functionTimer(timeInSeconds,
        elapsedTime => {
            db.ref('cloudTimer/observableTime').set(elapsedTime);
        })
        .then(totalTime => {
            console.log('Timer of ' + totalTime + ' has finished.');
        })
        .then(() => new Promise(resolve => setTimeout(resolve, 1000)))
        .then(() => event.data.ref.remove())
        .catch(error => console.error(error));
});
        });

       function functionTimer (seconds, call) {
        return new Promise((resolve, reject) => {
         if (seconds > 300) {
        reject('execution would take too long...');
        return;
           }
            let interval = setInterval(onInterval, 1000);
            let elapsedSeconds = 0;

        function onInterval () {
        if (elapsedSeconds >= seconds) {
            clearInterval(interval);
            call(0);
            resolve(elapsedSeconds);
            return;
        }
        call(seconds - elapsedSeconds);
        elapsedSeconds++;
    }
          });
                }
Run Code Online (Sandbox Code Playgroud)

Lin*_*nxy 6

好的,首先转到这里: https: //firebase.google.com/docs/functions/并了解什么是函数以及如何部署自己的函数。

然后部署这个“myCloudTimer”功能..

exports.myCloudTimer = functions.database.ref('/startTimerRequest/').onCreate((event) => {
    return db.ref('cloudTimer/timeInMs').once('value', snap => {
        if (!snap.exists()) {
            return Promise.reject('time is not defined in the database.');
        }

        let timeInSeconds = snap.val() / 1000;
        console.log('Cloud Timer was Started: ' + timeInSeconds);

        return functionTimer(timeInSeconds,
            elapsedTime => {
                db.ref('cloudTimer/observableTime').set(elapsedTime);
            })
            .then(totalTime => {
                console.log('Timer of ' + totalTime + ' has finished.');
            })
            .then(() => new Promise(resolve => setTimeout(resolve, 1000)))
            .then(() => event.data.ref.remove())
            .catch(error => console.error(error));
    });
});

function functionTimer (seconds, call) {
    return new Promise((resolve, reject) => {
        if (seconds > 300) {
            reject('execution would take too long...');
            return;
        }
        let interval = setInterval(onInterval, 1000);
        let elapsedSeconds = 0;

        function onInterval () {
            if (elapsedSeconds >= seconds) {
                clearInterval(interval);
                call(0);
                resolve(elapsedSeconds);
                return;
            }
            call(seconds - elapsedSeconds);
            elapsedSeconds++;
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

然后通过创建一个名为的节点来测试它startTimerRequest:(put any value here)

在此输入图像描述

然后您应该看到observableTime从 7 倒计时到 1,紧随其后的是 0,并且请求自行删除。

因此,您的 Android 用户所要做的就是观察该/cloudTimer/observableTime值,某人或某物必须触发倒计时器。您可以手动触发它,或者让用户触发它,或者让函数触发它,这取决于您想要触发它的方式和时间。

注意:此代码不是很安全,请添加保护措施,例如防止多个请求或函数执行时间过长(成本)等...但它应该可以工作并帮助您入门。