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)
好的,首先转到这里: 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值,某人或某物必须触发倒计时器。您可以手动触发它,或者让用户触发它,或者让函数触发它,这取决于您想要触发它的方式和时间。
注意:此代码不是很安全,请添加保护措施,例如防止多个请求或函数执行时间过长(成本)等...但它应该可以工作并帮助您入门。
| 归档时间: |
|
| 查看次数: |
6929 次 |
| 最近记录: |