素胚勾勒不出你
2024-01-18 17:16:16
首先,這個(gè) lambda 只需點(diǎn)擊一個(gè)按鈕即可工作。當(dāng)我刷新頁面時(shí)按下按鈕時(shí),我從控制臺(tái)收到一條“未定義”消息。但是當(dāng)我等待一小會(huì)兒(沒有刷新頁面)并再次單擊按鈕時(shí),我可以在控制臺(tái)上看到我期望的值。為此,我想到了使用睡眠功能,但我不想使用它。我可以使用多線程程序中使用的機(jī)制(例如鎖定/同步)來解決這個(gè)問題嗎?重要的是,這是什么原因?請(qǐng)注意:我是 React 和 Web 開發(fā)的新手。代碼;const handleAddCarPark = () => { var dbRef = fire.database().ref("foo/bar/qux"); var newParkID; var copy_count; dbRef.child("count").on("value", snapshot => { newParkID = parseInt(snapshot.val()) + 1000000; copy_count = parseInt(snapshot.val()); }); console.log(newParkID);}
1 回答

尚方寶劍之說
TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊
on()
是異步的并且立即返回。稍后,當(dāng)查詢完成時(shí),回調(diào)將被調(diào)用,并且每次數(shù)據(jù)更改時(shí)都會(huì)再次調(diào)用。
在 JavaScript 中,只有一個(gè)線程。不需要鎖定或多線程技術(shù)。所有代碼和回調(diào)都在單個(gè)線程上調(diào)用。
您的代碼應(yīng)該只使用您傳遞給的回調(diào)內(nèi)部的查詢結(jié)果on()
。
如果您打算只查詢一次而不監(jiān)聽可能隨時(shí)間變化的結(jié)果,則應(yīng)該使用once()
而不是on()
. once()
也是異步的,并返回帶有查詢結(jié)果的承諾。您應(yīng)該學(xué)習(xí)如何使用這些 Promise,因?yàn)樗鼈兪悄?JavaScript 中處理異步結(jié)果的主要方式。
添加回答
舉報(bào)
0/150
提交
取消