Javascript 未能执行';发送';在';WebSocket';
我是javascript新手,希望使用WebSocket。当我创建Websocket对象并尝试发送时,出现以下错误:Javascript 未能执行';发送';在';WebSocket';,javascript,Javascript,我是javascript新手,希望使用WebSocket。当我创建Websocket对象并尝试发送时,出现以下错误: InvalidStateError: Failed to execute 'send' on 'WebSocket': Still in CONNECTING state. 所以我用下面的闭包解决了这个问题。这是解决我问题的合理方法吗?有更好的方法吗?我的方法的一个问题是,如果以后有人重新分配ws.onopen的值。我正在使用redux,因此在向后端发送请求时,我希望使用sen
InvalidStateError: Failed to execute 'send' on 'WebSocket': Still in CONNECTING state.
所以我用下面的闭包解决了这个问题。这是解决我问题的合理方法吗?有更好的方法吗?我的方法的一个问题是,如果以后有人重新分配ws.onopen
的值。我正在使用redux,因此在向后端发送请求时,我希望使用send。我也在使用ES6、webpack和node.js
const ws = new WebSocket("ws://echo.websocket.org/");
ws.onmessage = msg => console.log(msg);
const send = (()=>{
const queue = [];
ws.onopen = () => queue.forEach(msg => ws.send(msg));
return (msg) => {
if(ws.readyState === ws.OPEN){
ws.send(msg);
}
else{
queue.push(msg);
}
};
})();
send("foo");
send("bar");
你看过MDN上的吗?我认为您的
InvalidStateError
是因为您最初没有使用onopen
事件处理程序?@Simon Hänisch是的,我的解决方案基于此。我认为您的(msg)
参数在错误的函数中。如果将它传递给send()
,它实际上会传递给返回的函数,而不是自调用匿名函数。它应该是constsend=(()=>{/…
和return(msg)=>{/…
,对吗?关于您关于重新分配ws.onopen
的问题,您可以使用ws
对象来防止这种情况发生。@Simon Hänisch感谢您的反馈。我已修复了我的问题以反映您的评论。您是否从MDN查看了?我认为您的InvalidStateError
是因为您没有使用首先是onopen
事件处理程序?@Simon Hänisch是的,我的解决方案基于此。我认为(msg)
参数在错误的函数中。如果将它传递给send()
,它实际上会传递给返回的函数,而不是自调用匿名函数。它应该是const send=(()=>{/…
和return(msg)=>{/…
,对吗?关于您关于ws.onopen
被重新分配的问题,您可以使用您的ws
对象来防止这种情况。@Simon Hänisch感谢您的反馈。我已修复了我的问题以反映您的评论。