目的:爲了提供一個簡單易用的與庫服務器通信的JS庫,我試圖在API開始時建立一個WebSocket連接,之後定義庫的功能。在JS內部建立WebSocket連接併爲其創建一個JS API
問題:的問題是,我的套接字的readyState不過渡到1(就緒)之前庫加載和用戶的腳本運行。調試這已經證實了這一點,我不知道如何確保我的WebSocket在繼續用戶腳本之前建立。
我有什麼:
(function(myObject) {
var socket = new WebSocket(url);
socket.emit = function() {
//do some tasks and create a var "message"
socket.send(message);
}
window.myObject = myObject.prototype = {
doSomething: function() {
socket.emit();
}
}
}(myObject = window.myObject || {}));
上面,我Socket對象,反過來,socket.send調用上定義的自定義方法(socket.emit())()。我這樣做是爲了在通過socket.send()發送數據之前處理一些數據,重複使用否則會重複的代碼。
然後,我有包括該JS庫和一個簡單的腳本運行如下一些非常基本的html:
$(document).ready(function() {
myObject.doSomething();
});
我得到的錯誤是:「無法執行‘發送’ON‘的WebSocket’:已在連接狀態「。
該庫成功加載,但Websocket在客戶端腳本運行之前未完成連接。在API完成加載之前,如何確保我的WebSocket已連接(readystate == 1)?
感謝您的幫助!
您正在運行doSomething準備就緒的文檔,但連接尚未準備就緒。您應該查看可用於連接的事件(onOpen,onClose,onMessage,onError)並重構您的呼叫,以便連接準備好發送消息。 – NaNpx
沒錯,但最終我不會是編寫將調用庫的腳本的人。我想在幕後處理所有套接字業務,以便最終用戶可以簡單地撥打他們想要的電話。 – user24824