9

我在解析云代码时遇到问题。以下是更新我的游戏分数表中的分数和更改日期。但它不起作用。虽然我在我的网络代码中做同样的事情并且它工作正常。我在这里做错什么了吗?

'use strict';
var GameScore = Parse.Object.extend('GameScore');
Parse.Cloud.define('editScore', function(req, res) {
  var query = new Parse.Query(GameScore);
  query.get(req.params.objectId, {
    success: function(gameScore) {
      gameScore.set('score', req.params.score);
      gameScore.set('date', req.params.date);
      gameScore.save(null);
      gameScore.fetch(myCallback);
    },
    error: function(err) {
      return res.error(err);
    }
  });
});

如果是这样,请帮助我,以便我可以使其正常工作。

4

3 回答 3

1

尝试Parse.Cloud.useMasterKey();在函数内部添加以绕过任何可能导致问题的 ACL 限制。例子:

var GameScore = Parse.Object.extend('GameScore');
Parse.Cloud.define('editScore', function(req, res) {

  // use Master Key to bypass ACL
  Parse.Cloud.useMasterKey();

  var query = new Parse.Query(GameScore);
  query.get(req.params.objectId, {
    success: function(gameScore) {
      gameScore.set('score', req.params.score);
      gameScore.set('date', req.params.date);
      gameScore.save(null);
      gameScore.fetch(myCallback);
    },
    error: function(err) {
      return res.error(err);
    }
  });
});
于 2014-08-12T12:12:21.237 回答
1
var GameScore = Parse.Object.extend('GameScore');
Parse.Cloud.define('editScore', function(req, res) {
  Parse.Cloud.useMasterKey();
      var query = new Parse.Query(GameScore);
      query.get(req.params.objectId, {
        success: function(gameScore) {
          gameScore.set('score', req.params.score);
          gameScore.set('date', req.params.date);
          gameScore.save().then(function() {
                  gameScore.fetch(callback);
                });
        },
        error: function(err) {
          return res.error(err);
        }
      });
    });

使用主密钥我们覆盖 acl。使用 then promise 方法我们调用回调函数,否则有可能获取旧数据。

于 2014-08-13T12:38:36.167 回答
1

你有3个问题:

  • 你不是在等待保存完成
  • 你没有打电话res.success()
  • 您正在引用myCallback您向我们展示的内容中未定义的内容

简单的解决方案是替换这一行:

gameScore.save(null);

使用此代码:

gameScore.save().then(function () {
    res.success();
});

如果您确实需要该 fetch 调用,则可以将其链接到:

gameScore.save().then(function () {
    return gameScore.fetch(myCallback);
}).then(function () {
    res.success();
});
于 2014-08-13T08:54:44.177 回答