【发布时间】:2018-06-03 18:13:25
【问题描述】:
我有一个名为Stats 的类,其中包含secondsPlayed(编号)、createdAt(日期)和timeScore(编号)列
此类包含数千个对象,但 timeScore 列是空的。
我想用公式填充timeScore 列,该公式使用列secondsPlayed(数字)、createdAt(日期),就像您在 Excel 中所做的那样。公式为:
(secondsPlayed*10^8)/(Date.now()-createdAt.getTime())
正如您所见,timeScore 列的值应该每秒都在变化,因为 Date.now() 和 secondsPlayed 是不断变化的变量。
因此,我想每 5 分钟更新和重新填充一次 timeScore 列。这应该会自动发生。
最好的方法是什么?我认为使用云代码计算和填充 timeScore 列,然后通过简单的 Parse 查询获取 timeScore 列表,这与将数千个对象下载到每个设备并每 5 分钟计算和更新一次客户端相比是最好的。
我不太了解编写云代码,但通过阅读this guide 和this SO question,我想出了以下代码。
const _ = require("underscore");
Parse.Cloud.define("timeScore", function(request, response) {
const query = new Parse.Query("Stats");
const maxSeconds = (Date.now() - new Date('2017-12-12T06:00:04.022Z').getTime())/1000;
query.lessThan("secondsPlayed", maxSeconds);
query.find().then(function(results) => {
_.each(results, function(result) {
var secondsPlayed = result.get("secondsPlayed") || 0;
var createdAt = result.get("createdAt") || new Date('2017-12-12T06:00:04.022Z');
result.set("timeScore", (secondsPlayed*100000000)/(Date.now()-createdAt.getTime()));
});
return Parse.Object.saveAll(results);
}).then(function(results) {
response.success(results);
}, function(error) {
response.error(error);
})
.catch(() => {
response.error("FAILED");
});
});
我不知道如何处理这段代码。我不知道如何测试它,或者它是否有效。我应该如何进行?
我需要从 xamarin 应用程序调用它吗?我只需要根据代码每 5 分钟填充和更新该列。我不需要从应用程序调用云代码。我只想从应用程序中查询timeScore 列。这可能吗?
【问题讨论】:
标签: javascript heroku parse-platform parse-server parse-cloud-code