我正在尝试获取服务器的日期时间值,并且已经实现了以下代码。但是,时间的返回值有时为null,有时无法按预期工作。
使用https请求代码的主要原因是要检查代码是否已经在今天运行,以使其不重复其操作。
export const helloWorld = functions.https.onRequest((request, response) => {
response.send("Hello from Firebase!")
const database = ref.child('Admins/currentDate')
const timeStamp = admin.database.ServerValue.TIMESTAMP
const currentTime = new Date(timeStamp)
const currentDate = currentTime.getDate().toString
const currentMonth = currentTime.getMonth().toString
const currentYear = currentTime.getFullYear().toString
const dateFormat = currentDate + " " + currentMonth + " " + currentYear
database.once('value').then(function (snapshot) {
snapshot.forEach(function (data) {
const appTime = data.val().currentTime
if(appTime === dateFormat){
console.log("Points already added today." + dateFormat)
}
else{
console.log("All points successfully updated." + dateFormat)
data.ref.update({currentTime : dateFormat})
.catch(console.error)
udpateAllPoints()
}
})
}).catch(console.error)
})
注意:updateAllPoints()
用于将所有用户点增加10%[此代码按预期工作]
function udpateAllPoints(){
const database = ref.child('Users')
database.once('value').then( function (snapshot){
snapshot.forEach(function (data){
const points = data.val().points
const updatedPoints = updatePoints(points)
const userId = data.key
data.ref.update({ points : updatedPoints})
.catch(console.error)
console.log("This User "+ userId +"has "+points+ "points. \n")
})
}).catch(console.error)
}
dateFormat的当前示例输出如下:
运行上述代码时
function toString() { [native code] } function toString() { [native code] } function toString() { [native code] }
将其删除为字符串
function { [native code] } function { [native code] } function { [native code] }
使用Date.Now()或新的Date()代替新的Date(timeStamp)时
NaN NaN NaN
答案 0 :(得分:1)
在执行其余功能之前,您正在发送响应。这是行不通的。发送请求后,Cloud Functions几乎立即终止代码。这意味着您的数据库工作可能永远不会发生。
您应该做的是仅在所有异步工作完成之后才发送响应。请参阅documentation:
使用res.redirect(),res.send()或res.end()终止HTTP函数。
答案 1 :(得分:0)
const currentTime = await new Date()
const currentDate = currentTime.getDate()
const currentMonth = currentTime.getMonth()+1
const currentYear = currentTime.getFullYear()
const dateFormat = currentDate + " " + currentMonth + " " + currentYear
toString
不需要,并且输出是我期望的