亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Firebase 原子增量如何在競爭條件下工作?

Firebase 原子增量如何在競爭條件下工作?

森林海 2023-06-09 17:30:13
Firebase 原子增量可用于更新或設置。但是他們不會在完成時返回更新的值。所以,我必須在更新或設置后立即使用 once('value') :    var submitref = firebase.database().ref('/sequence/mykey')    return submitref.set(firebase.database.ServerValue.increment(1)).then(_=>{        return submitref.once('value').then(snap=>snap.val());    });讓我們假設 2 個線程正在同時執行此代碼。submitref.set() 可以正常工作,因為原子增量。但是,如果它們同時完成 submitref.set() 并同時執行 submitref.once('value'),則兩個線程將收到相同的遞增值 +2。這是一種可能性還是我沒有正確理解它?
查看完整描述

2 回答

?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

increment操作在服務器上以原子方式執行。在他們的操作中不能保證所有客戶端(甚至任何客戶端)都會看到所有中間狀態。

保持順序、單調遞增計數器的用例更適合事務,因為在事務中,客戶端根據當前值控制新值。


查看完整回答
反對 回復 2023-06-09
?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

JavaScript 是一種單線程語言。相對于任何其他代碼,每一位代碼都以某種順序執行。除了通過任何本機庫外,沒有線程爭用,這里不是這種情況。此外,實時數據庫將所有操作按照接收順序通過單個連接進行流水線處理,因此其操作也具有一致的順序。

綜上所述,我想您可能會遇到這樣一種情況,即兩次調用發生set()在兩次調用之前once(),這意味著它們都將顯示兩倍的增量值。

在這種情況下,您最好使用 listener withon()以便隨時了解最新的值,并在看到它發生變化時對其采取行動,而不管建立它之后會發生什么。


查看完整回答
反對 回復 2023-06-09
  • 2 回答
  • 0 關注
  • 159 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號