2016-12-27 12 views
2

私は周りを見てきましたが、Firebase Transactionをやっている人はたくさんいます。私がしたいのは、カウンターに1を追加するだけで、作品は完璧になったのですが、自分のやり方がドキュメントよりはるかに簡単だったので、私が正しくやっていることを確認したいのです。Firebaseトランザクション - これは正しいですか?

乾杯! :)

database.child("stories").child(articleKey).runTransactionBlock({ (currentData:FIRMutableData) -> FIRTransactionResult in 
      if var post = currentData.value as? [String: AnyObject] { 

       var likeCount = post["storyLikes"] as? Int ?? 0 
       likeCount += 1 
       post["storyLikes"] = likeCount as AnyObject? 
       currentData.value = post 

       return FIRTransactionResult.success(withValue: currentData) 
      } 
      //Abort like if there was a problem 
      return FIRTransactionResult.abort() 
     }) 

答えて

3

あなたが論理に満足している限り、それは私によく見えます。

現在のロジックは更新のみです。既存の投稿がない場合は、トランザクションを中止します(currentData.valueはnullになります)。

あなたは説明の中で言及したとおりに追加するのではなく、likeCountから1を削除します。

確かに動作しているバージョンですが、特にデバッグ/テスト時にエラーをログに記録できるrunTransaction:andCompletionBlockを実装することができます。

+0

ありがとうございました!ああ、これは、私が投稿した違ったロジックだったよ!記事が作成されると、デフォルトのlike counterが0に設定され、トランザクションを中止しません。私は使用できるコンプリートブロックがあることを知りましたが、必要ならば私はまだトスしています!でもありがとう! – Eli

関連する問題