簡體   English   中英

在 firebase 中執行潛在的無限 while 循環是否安全?

[英]Is it safe to do a potential infinite while loop to write data in firebase?

我在我的應用程序中使用 firebase 並且大多數時候它使用此指令在 firebase 條目上寫入值。

ref.setValue(result);

但在極少數情況下不寫入值。

所以我想過這樣做:

boolean finished=false;
[...]  

t=new Thread(new Runnable() {
                        @Override
                        public void run() {
                        while (!finished)
                        {
                            ref.setValue(result, new DatabaseReference.CompletionListener() {
                                @Override
                                public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
                                    finished=true;
                                }
                        }
                            });
                            t.sleep(50);
                        }
                    });
                    t.start();

由於大多數情況下數據寫入成功,看起來即使寫入數據時發生錯誤,最終還是會成功寫入。

但也許這不足以確保數據最終被寫入,並且可能導致無限循環,導致一個接一個的數據庫錯誤。

這是解決問題的好方法嗎?

我會說不,這不是一個好的解決方案,更好的解決方案是計數器,最大重試次數為 10,這消除了在不斷出現數據庫錯誤的情況下出現無限循環的風險。 雖然仍然允許多次嘗試將數據正確插入 firebase 數據庫。

實時數據庫客戶端已在后台線程中運行所有網絡操作。 這意味着所有操作都不會阻塞您的主線程。 嘗試創建一個新線程,根本沒有任何好處。 除此之外,嘗試使用:

t.sleep(50);

如果請求時間少於 50 毫秒,可能會起作用。 51怎么樣? 這不是你應該如何處理異步操作。 但是,解決方案總是相同的。 寫操作完成時需要使用的任何代碼,都需要在onComplete方法中,或者從那里調用。 如果你想學習如何處理異步操作,我建議你從下面的帖子中查看我的答案:

如果您了解 Kotlin,我還建議您閱讀以下文章:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM