Firebase işlemi, bu yolda veri olsa bile yolda null okur
Firebase işlemlerinin bazen verileri boş olarak okuduğunu ancak daha sonra değer sunucudan alınıp kaydedilene kadar döngünün tekrar çalıştığını anlıyorum. Ancak, işlemin boş verileri okuduğu ve boş olması durumunda döndürdüğüm değeri teslim ettiği benzersiz bir durumla karşı karşıyayım. Lütfen ekli koda bir göz atın.
deductTransaction.transaction((current_value) => {
if (current_value != null) {
return current_value - cost;
}
return 25;
});
"DeductTransaction" yukarıdaki kodda, güncellemek istediğim verilerin (sayı) yolu
Yukarıdaki kod bazı durumlarda sorunsuz çalışır, yani döngü null okunduğunda tekrar çalışır ve bazen sadece bir kez çalışır, bu yolda bazı veriler olsa bile değeri boş olarak okur ve sonra 25'i işleyerek orijinal verileri yok eder.
Not: Saçımı çekmeye çok yakınım, bu yüzden herhangi bir yardım çok takdir edilecektir.
Yanıtlar
Bir konumda bir işlem çalıştırdığınızda, geri arama / işleyici, istemcinin o konumdaki değerle ilgili geçerli tahminiyle hemen çağrılır. Çoğu zaman, mevcut değerin bu ilk tahmini olacaktır null
.
Yöneticinizin bu durumu halletmesi gerekiyor. Öyleyse: konumda hiçbir veri olmadığını ve maliyeti düşürmek istediğinizi söyleyin, ne olur? Genellikle ya geri dönersiniz -25
ya da işlemi iptal etmesini söylersiniz.
Her iki durumda da: ilk tahmin ve yeni değer veritabanı sunucusuna gönderilir, bu sunucu daha sonra ilk tahminin yanlış olduğunu tespit eder ve mevcut değeri arayana döndürür. SDK daha sonra işleyicinizi / geri aramayı, geçerli değerde (hayır, umarım doğrudur) en iyi tahminle yeniden çağırır.
Ayrıca bkz:
- Firebase gerçek zamanlı veritabanı işlem işleyicisi çoğu zaman iki kez çağrılır (yukarıdaki akışın bir diyagramıyla)
- Firebase runTransaction çalışmıyor - MutableData boş
- Firebase'de çakışma çözümünü anlama
- Firebase işlemimdeki currentData neden her zaman sıfır?
Not: Günümüzde increment
operatörü kullanarak işlem yapmadan artırma ve eksiltme işlemleri gerçekleştirebilirsiniz . Bu, kodunuzu önemli ölçüde basitleştirir ve Firebase Gerçek Zamanlı Veritabanında bir değeri atomik olarak ne kadar hızlı artırabilirsiniz? Bölümünde gösterildiği gibi daha iyi performans gösterir. .
Karşılaştırma için: increment
operatör 0
, konumda herhangi bir değer yoksa geçerli bir değer varsayar .