我知道這些類型的問題相當頻繁地出現,但我需要JavaScript中等待機制的幫助。我知道基於setTimeout的解決方案將會出現,但我不確定如何在我的案例中取消。防止返回,直到條件得到滿足
我在寫內部使用WebSocket的API。有一個connect()方法設置了WebSocket,並且我需要在WebSocket設置完成之後才能返回。我希望它返回連接是否成功的值,但這不是主要問題。
我遇到的問題是用戶調用connect()後,他們可能會調用另一個依賴於WebSocket的方法來正確設置。如果調用得太早,則會拋出一個錯誤,指出該對象不可用。
我當前的解決方案是當我確定連接成功並在每種方法中檢查它時,設置「連接」標誌。如果它沒有連接,我將方法調用添加到通過設置標誌的相同代碼運行的隊列中。這是有效的,但是它將代碼風格引入到我的方法中,並且從用戶角度看似乎也有誤導性,因爲這些函數的調用被推遲了。另外,如果有其他用戶代碼依賴於這些調用在它們到達之前完成,它將不會按預期行事。
我一直在如何處理這種情況下我的大腦。最簡單的解決方案是找到一種方法來阻止從連接返回,直到WebSocket設置完成,但這不是真正的JavaScript方式。另一種選擇是讓他們在回調中提供其餘的代碼,但在這種情況下,這似乎是一個奇怪的事情。也許我在想這件事?
編輯:爲了更好地說明我的問題,這裏是一個什麼樣的用戶可以做一個例子:
var client = new Client(options);
client.connect();
client.getServerStatus();
的getServerStatus()方法是內部使用WebSocket的。如果WebSocket尚未設置,用戶將得到該不可用的錯誤。
如何禁用用戶interuptions,直到websocket建立?這是異步JavaScript的魔力,瀏覽器有時間在處理請求時刷新dom。 – Sebas
如果您遇到問題,您首先嚐試併發布問題如何? – Sebastien
從套接字的連接事件中調用「其他方法」,而不是從套接字初始化的同一位置調用「其他方法」... – dandavis