解析服务器使用云代码自动填充和更新列

时间:2018-06-03 18:13:26

标签: javascript heroku parse-platform parse-server cloud-code

我有一个名为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 guidethis 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列。这可能吗?

1 个答案:

答案 0 :(得分:0)

要从.net客户端进行测试,ParseCloud提供CallFunctionAsyncSee the guide for an example here

您在代码中发现的至少一个问题是查询最多会返回1k个对象,因此查询/更新/保存逻辑每次运行时都必须光标查看Stats个对象。

经过测试,您需要创建一个Heroku将让您安排的Web工作者。 See their guide about that here

但是我不愿意进一步详细讨论这些问题,因为我不同意这个问题的前提:这个更新应该完成,或者反复进行。

考虑运行此代码不会向系统添加新信息。 createdAt字段仍然是固定的。这段代码所做的就是产生一种奇怪的方式来表示当前时间(作为创建的时间和自那时起的间隔)每次运行数千次。只有当需要知道给定对象的间隔(now - createdAt)时,才应该这样做。