我想在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++;
}
});
}
答案 0 :(得分:1)
好的,首先到这里: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++;
}
});
}
然后通过创建名为startTimerRequest:(put any value here)
然后你应该看到observableTime
从7倒数到1倒数,0紧随其后,请求会自行删除。
所以你的所有Android用户都必须这样做,观察/cloudTimer/observableTime
值,某人或某事必须触发倒数计时器。您可以手动触发它,或让用户触发它,或者让某个功能触发它,这取决于您想要触发它的方式和时间。
警告:此代码不是很安全,请添加安全措施,例如防止多个请求,或者太长时间的功能执行(成本)等...但它应该可以工作并让你开始。