html5 - javascript異步編程書中遇到的問題?
問題描述
再看JavaScript異步編程這本書,然后看到了一段代碼
var webSocketCache = {};function openWebSocket(serverAddress, callback) { var socket; if (serverAddress in webSocketCache) {socket = webSocketCache[serverAddress];if (socket.readyState === WebSocket.OPEN) { callback();} else { socket.onopen = _.compose(callback, socket.onopen);}; } else {socket = new WebSocket(serverAddress);webSocketCache[serverAddress] = socket;socket.onopen = callback; }; return socket;};
書中說
var socket=openWebSocket(url,function(){ socket.send(’Hello,server!’); });
這樣會使代碼崩潰,不解。。在返回值之前調用回調函數為什么會使代碼崩潰。希望大大們能幫我解釋解釋
問題解答
回答1:在返回之前回調函數就有可能被執行了,這個時候的socket還沒有賦值
可以給callback傳一個參數來避免這種情況
回答2:你url 定義了么- -
回答3:const func = function (callback) { callback(); return 100;};const x = func(() => { console.log(x); //此處將打印 undefined;});console.log(x); //此處打印 100
這樣解釋不知道你能否明白?
相關文章:
1. docker不顯示端口映射呢?2. docker內創建jenkins訪問另一個容器下的服務器問題3. vim - docker中新的ubuntu12.04鏡像,運行vi提示,找不到命名.4. docker-compose 為何找不到配置文件?5. docker images顯示的鏡像過多,狗眼被亮瞎了,怎么辦?6. debian - docker依賴的aufs-tools源碼哪里可以找到啊?7. docker gitlab 如何git clone?8. mac連接阿里云docker集群,已經卡了2天了,求問?9. docker-compose中volumes的問題10. docker api 開發的端口怎么獲取?
