fix(websocket): don't throw unhandled promise rejections
This commit is contained in:
parent
991b89fb11
commit
f352ebd928
|
|
@ -316,7 +316,7 @@ export class WebSocketTransport implements ConnectionTransport {
|
||||||
|
|
||||||
onmessage?: (message: string) => void;
|
onmessage?: (message: string) => void;
|
||||||
onclose?: () => void;
|
onclose?: () => void;
|
||||||
private _connect: Promise<void>;
|
private _connect: Promise<{success: boolean, message?: string}>;
|
||||||
|
|
||||||
constructor(url: string) {
|
constructor(url: string) {
|
||||||
this._ws = (isNode ? new NodeWebSocket(url, [], {
|
this._ws = (isNode ? new NodeWebSocket(url, [], {
|
||||||
|
|
@ -324,8 +324,8 @@ export class WebSocketTransport implements ConnectionTransport {
|
||||||
maxPayload: 256 * 1024 * 1024, // 256Mb
|
maxPayload: 256 * 1024 * 1024, // 256Mb
|
||||||
}) : new WebSocket(url)) as WebSocket;
|
}) : new WebSocket(url)) as WebSocket;
|
||||||
this._connect = new Promise((fulfill, reject) => {
|
this._connect = new Promise((fulfill, reject) => {
|
||||||
this._ws.addEventListener('open', () => fulfill());
|
this._ws.addEventListener('open', () => fulfill({success: true}));
|
||||||
this._ws.addEventListener('error', event => reject(new Error('WebSocket error: ' + (event as ErrorEvent).message)));
|
this._ws.addEventListener('error', event => fulfill({success: false, message: (event as ErrorEvent).message}));
|
||||||
});
|
});
|
||||||
// The 'ws' module in node sometimes sends us multiple messages in a single task.
|
// The 'ws' module in node sometimes sends us multiple messages in a single task.
|
||||||
// In Web, all IO callbacks (e.g. WebSocket callbacks)
|
// In Web, all IO callbacks (e.g. WebSocket callbacks)
|
||||||
|
|
@ -348,8 +348,15 @@ export class WebSocketTransport implements ConnectionTransport {
|
||||||
this._ws.addEventListener('error', () => {});
|
this._ws.addEventListener('error', () => {});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async _ensureConnected() {
|
||||||
|
const {success, message} = await this._connect;
|
||||||
|
if (success)
|
||||||
|
return;
|
||||||
|
throw new Error('WebSocket error: ' + message);
|
||||||
|
}
|
||||||
|
|
||||||
async send(message: string) {
|
async send(message: string) {
|
||||||
await this._connect;
|
await this._ensureConnected();
|
||||||
this._ws.send(message);
|
this._ws.send(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue