2016-08-18 50 views
0

試着爲socket.on('message', function(data) {})構建某種「智能解析器」,以便我可以對第一個參數進行「開關/大小寫」操作。是否有該參數的全局句柄,以便類似下面的作品?對於socket.io的.on()中的第一個參數,Javascript可訪問'句柄'?

socket.on(socket.token.name, function(data) { 
    switch (socket.token.name) { 
    case "table:dashboard": 
     // do something with data 
     break; 
    case "table:monitor": 
     // do something with data 
     break; 
    } 
}); 

任何想法?我已經閱讀了socket.io文檔,但還沒有發現任何提示還有。或者其他一些方向來實現相同的想法?

回答

0

只需將所有東西包裝在封口中即可。

function getHandler(name) { 
    return function(data) { 
    switch (name) { 
     case "table:dashboard": 
     // do something with data 
     break; 
     case "table:monitor": 
     // do something with data 
     break; 
    } 
    } 
} 

socket.on("foo", getHandler("foo")); 
socket.on("bar", getHandler("bar")); 

儘管如此,您還是會返回一個不同的函數,而不是每次都運行一次switch-case。

function getHandler(name) { 
    switch (name) { 
    case "table:dashboard": 
     return function(data) {} 
     break; 
    case "table:monitor": 
     return function(data) {} 
     break; 
    } 
} 

備選地,只是第二個參數綁定到處理程序:

socket.on("table:dashboard", handler.bind(handler, "table:dashboard")) 

function handler(name, data) { 
    switch (name) { 
    case "table:dashboard": 
     // do something with data 
     break; 
    case "table:monitor": 
     // do something with data 
     break; 
    } 
}); 
+0

'socket.on( 「foo」 的,getHandler( 「富」));'(或handler.bind替代)只是看起來重複 - 不想重複「foo」,而且我不想關心處理程序名稱......只是以編程方式解析處理程序(讓我們過濾掉壞名字)。當它進入客戶端時,會傾向於直接解析事件處理程序名稱。 但是好的,我可以看到,提供單個處理程序名稱,然後解析數據中的某個唯一標識符*可能是更好的方法(正如Javascript聊天中所討論的)。感謝您的洞察! :) –

相關問題