Skip to content

Commit 0a059cd

Browse files
author
Michael Johnson
committed
Handle exceptions in websocket.New
1 parent e432b38 commit 0a059cd

File tree

1 file changed

+26
-12
lines changed

1 file changed

+26
-12
lines changed

wrapper.go

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,32 @@ const (
3838
Closed ReadyState = 3
3939
)
4040

41+
// New creates a new low-level WebSocket. It immediately returns the new
42+
// WebSocket.
43+
func New(url string) (ws *WebSocket, err error) {
44+
defer func() {
45+
e := recover()
46+
if e == nil {
47+
return
48+
}
49+
if jsErr, ok := e.(*js.Error); ok && jsErr != nil {
50+
ws = nil
51+
err = jsErr
52+
} else {
53+
panic(e)
54+
}
55+
}()
56+
57+
object := js.Global.Get("WebSocket").New(url)
58+
59+
ws = &WebSocket{
60+
Object: object,
61+
EventTarget: util.EventTarget{Object: object},
62+
}
63+
64+
return
65+
}
66+
4167
// WebSocket is a low-level convenience wrapper around the browser's WebSocket
4268
// object. For more information, see
4369
// http://dev.w3.org/html5/websockets/#the-websocket-interface
@@ -100,15 +126,3 @@ func (ws *WebSocket) Close() (err error) {
100126
ws.Object.Call("close")
101127
return
102128
}
103-
104-
// New creates a new WebSocket. It immediately returns the new WebSocket.
105-
func New(url string) *WebSocket {
106-
object := js.Global.Get("WebSocket").New(url)
107-
108-
ws := &WebSocket{
109-
Object: object,
110-
EventTarget: util.EventTarget{Object: object},
111-
}
112-
113-
return ws
114-
}

0 commit comments

Comments
 (0)