JavaScript語言如何實現等待函式值為真的操作?

時間 2021-05-29 22:57:52

1樓:navegador

如果你不介意真實阻塞,那使用Atomic. wait, 這個喚醒比較麻煩,只能從另乙個worker 喚醒。這個是真實掛起阻塞的(但是不是while那種佔CPU的阻塞)

2樓:suooq

我怎麼理解你這個問題???

我分析下

函式值指的是返回值

獲取函式返回值只有呼叫它

等待值為真,意思是無限制呼叫該函式直到返回值為真那麼,該函式內部返回值絕對是有判斷條件的,不然直接返回假,這輩子都不可能返回真

同時,該函式的判斷條件,被判斷的數值一定是變化的,不然和上面一樣,只會返回一種結果

現在如何解決?

既然有乙個數值一直在變化,那麼你呼叫該函式的依據就是該數值發生變化的時候,該數值發生變化之後,呼叫函式,從而判斷真假

3樓:

樓主說的不是很清楚,我猜測你的需求是你有乙個資源,它準備就緒的時間不定,耗時不明,所以你想要每隔一段時間就去檢查它一下,直到準備就緒了,就終止這個檢查。

不管猜測對不對,假設就這個需求,最原始的造輪子解決方案很簡單就四個字:非同步遞迴。

4樓:程一凡

猜測題主之前熟悉的語言是常規的多執行緒加同步寫法。而JS是單執行緒加事件驅動,程式設計思路很不一樣。猜測題主遇到了非同步場景,但是嘗試用其他語言的同步的寫法來實現,從一開始思路就錯了,熟悉JS的人基本不會像這樣寫。

其實JS天生被設計出來就是適合處理各種複雜的非同步場景,適應了程式設計思路後其實寫起來很簡單。建議先熟悉並適應JS的callback寫法,然後學習Promise,之後你應該就知道怎麼寫了。最後可以學習async-await,可以假裝用同步的寫法來寫非同步。

5樓:默存

class

Shop

)exec

(()=>)}

}let

exec:()

=>void

const

shop

=new

Shop((c

)=>)// promise 由 pending -> resolved 時執行

shop

.promise

.then

(()=>

)setTimeout

(()=>

,2000

)「等待」可以理解為 promise 的 pending 狀態,「函式為真」我在此理解為 promise 的 resolved 狀態。則 shop.promise.

then 之後的操作即為等待函式值為真的操作,不過需要主動呼叫 exec 函式。不知道是否滿足你的要求

6樓:陳張

好像對於題目大家理解都不太一致。

題主描述的場景應該是我呼叫兩個介面,乙個是登入介面,乙個是獲取使用者資訊介面,獲取使用者資訊的介面需要等待登入介面返回的資訊。

這是這典型的非同步場景了,可以通過async或者promise來解決;關於題主說到的不斷迴圈其實也是解決方法,但是效能確實是個問題,如果要解決迴圈帶來的效能問題可以使用setTimeout,利用js的事件機制進行優化。

7樓:崮生

最簡單就是迴圈

最好的方式是收集函式依賴的變數,當這些變數更新的時候再執行函式進行判斷,vue的計算屬性就是這樣的思路。

另外你可以了解一下響應式程式設計。

如何看待「JavaScript等語言都是垃圾」的言論

徐成 可以快速開發,適合天天改需求 可以寫出很多bug,適合天天修bug 可以造輪子,一天造乙個。於是很多人就有了可以幹的事情。要是一下子把程式寫的完美了,程式設計師就可以下崗了。 已登出 js的設計的時候就是為了簡單,不是為了粉絲們所謂的原型繼承理念。它遲早會被淘汰。為什麼js版本不斷公升級?正因...

JavaScript 的語言設計有哪些缺陷?

迷途書童 Object instanceof Function true Function instanceof Object true 你中有我,我中有你,理解起來很費勁 Function.constructor Function.constructor.constructor.delete gl...

JavaScript 是最好的程式語言嗎?

黑夜的眼睛 其他的語言給我感覺剛誕生的時候就是乙個完整的結構,後續都是在打補丁。學js的時候,給我感覺這個語言剛誕生的時候只算乙個補丁,後續是在這個補丁上搭建乙個完整結構。 小手冰涼9am 哪有什麼最好的語言,寫的舒不舒服全看個人習慣,我是受不了js,能吐槽的地方太多了 對於我這個喜歡C 的人來說 ...