私はfirebaseを使用しており、いくつかのアクションを連鎖したい。ここにシナリオがあります: アイテムを配列に追加したいのですが、プッシュIDを使用したくないので、アイテムが追加されるたびにfirebaseの変数 'Last_Id'が更新されます。レコードの数を数えるために 'Counter'変数も更新しています(numChildren()を使用しても遅くなることはありません)。 数とlast_id変数は、このように同じ木である: 数:
---------->私はこれをしなかった
---------->カウンター
をlast_id複数のfirebaseアクションとロールバックの連鎖
の1- last_idが
- をretreivedされています。彼らは両方私が順番に発生する3つの事をしたい項目を追加するときに、単一のトランザクション
で同時に更新できるように
Ite mは
- last_idを添加し、そしてカウンターは の両方をされている更新
これは約束を使用する私のコードです。
add:function(ref,obj){
//get last_id
return baseRef.child('Count').child("Last_Id").once("value")
.then(function(snapshot){
return (snapshot.val()+1);
})
//add new data
.then(function(key){
return baseRef.child(ref).child(key).set(obj,function(error){
if (error)
console.log(error.code)
})
})
//update Count and last key
.then(this.updateCountAndKey(ref,1))
},
updateCountAndKey:function(ref,i){
return baseRef.child('Count').transaction(function(currentValue) {
if (currentValue!==null)
return {
Counter:(currentValue.Counter||0) +i,
Last_Id:(currentValue.Last_Id||0)+1
}
},function(err,commited,snap) {
if(commited)
console.log("updated counter to "+ snap.val());
else {
console.log("oh no"+err);
}
},false)
}
私はjavascriptを初めて使い、特にこれが頑丈な方法であるかどうかを知りたいと約束しています。私は何かがうまくいかないときにロールバックをする方法も知りたい。あるものが失敗すると他のすべてが失敗する(例えば、Last_idとCounterへの更新が失敗し、アイテムが追加されない場合)。 何か助けていただければ幸いです。
感謝をインクリメントするトランザクションを使用します。私はこれを認識しています。そのため、last_idとCounterを同じ場所に配置しています。私はそれらの両方を同時に更新したかった。ロールバックはどうしたらいいですか? – user3552551