Firebase kullanıyorum ve bazı eylemleri zincirlemek istiyorum. İşte senaryo: Diziye bir öğe eklemek istiyorum ve push Id özelliğini kullanmak istemediğim için, bir öğe eklendiğinde her adımda bir 'Last_Id' değişkeni güncellemek istiyorum. Ayrıca kayıt sayısını saymak için bir 'Counter' değişkeni de güncelliyorum (bu yüzden yavaş olabilir numChildren() kullanarak bitmiyor). sayısı ve last_id değişken böyle aynı ağaçta şunlardır: Sayısı:
----------> last_id Bunu yapan
----------> SayaçBirden çok firebase eylemi ve geri dönüşler zincirleme
1- last_id
- retreived edilir: her ikisi de tek bir işlemde aynı anda güncellenebilir böylece bir öğe eklediğinizde
Yani sırayla gerçekleşmesi 3 şeyler istiyorum
Ite m
- last_id eklenir ve Sayaç hem güncellenen
Bu sözlerin kullanır benim kodudur.
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 yeniyim ve özellikle sözler bu şeyleri yapmanın sağlam bir yol olup olmadığını bilmek istiyorum çünkü. Ayrıca bir şeyler ters giderse roll-back yapmak nasıl bilmek istiyorum. Böylece bir şey başarısız olursa, diğer her şey başarısız olur (örneğin, Last_id ve Counter'daki güncelleme başarısız olursa öğe eklenmez). Herhangi bir yardım çok takdir edilmektedir.
Teşekkür artırmak için bir işlem kullanırlar. Bunun farkındayım, bu yüzden last_id ve Counter'yi aynı yere koydum. İkisinin de aynı anda güncellenmesini istedim. Geri bildirimler hakkında bunun için herhangi bir tavsiyeniz var mı? – user3552551