0

私はParse APIを初めて使用し、次のことを行う方法を理解しようとしています:

私のアプリは文字列 (「foo」、「bar」など) を保存します。「foo」は、ユーザーが何回追加しようとしても、その文字列が追加されようとした回数のカウントとともに、1 回だけ存在する必要があります。したがって、4 人のユーザーが文字列「foo」を追加しようとすると、次のように関連付けPFObjectられます。

name: "foo"
count: 4

(「foo」という名前のオブジェクトが複数存在することはありません)

「foo」を照会して取得し、カウントを更新できることはわかっていますが、複数のユーザーが同時に「foo」を更新しようとすると競合状態が発生するような気がします。

Parse APIを介してこれを達成するための正しい/最良の方法は何ですか(問題がある場合はiOSを使用しています)。

4

2 に答える 2

1

クラウド コードを解析しますbeforeSavehttps://parse.com/docs/cloud_code_guide#functions-modifysave

保存が発生する前に、行の存在を確認し、更新してから戻りますresponse.error()

このようなもの:

Parse.Cloud.beforeSave("MyObject", function(request, response) {
  var newObject = request.object;
  if(!newObject.existed()) {
    var query = new Parse.Query("MyObject");
    var name = newObject.get("name");
    query.equalTo("name", name);
    query.first().then(function(existing){
      if(existing){
        existing.increment("count");
        return existing.save().then(function(){
          response.error(name + " already exists");
        });
      }
      else {
        response.success();
      }
    });
  }
  else {
    response.success();
  }
});
于 2014-09-07T18:05:07.343 に答える
1

Parse は、複数のユーザーがカウンターを更新しようとするときの問題を回避するのに役立つ incrementKey メソッドを提供します。必要に応じて、特定の量だけ増減することもできます。彼らはそれをカウンターと呼んでいます。しかし、これは競合状態の問題を解決するだけです。

[myString incrementKey:@"count"];
[myString saveInBackground];

詳細については、 https : //www.parse.com/docs/ios_guide#objects-updating/iOS を参照してください。

于 2014-09-08T09:57:29.773 に答える