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;
|
||||
onclose?: () => void;
|
||||
private _connect: Promise<void>;
|
||||
private _connect: Promise<{success: boolean, message?: string}>;
|
||||
|
||||
constructor(url: string) {
|
||||
this._ws = (isNode ? new NodeWebSocket(url, [], {
|
||||
|
|
@ -324,8 +324,8 @@ export class WebSocketTransport implements ConnectionTransport {
|
|||
maxPayload: 256 * 1024 * 1024, // 256Mb
|
||||
}) : new WebSocket(url)) as WebSocket;
|
||||
this._connect = new Promise((fulfill, reject) => {
|
||||
this._ws.addEventListener('open', () => fulfill());
|
||||
this._ws.addEventListener('error', event => reject(new Error('WebSocket error: ' + (event as ErrorEvent).message)));
|
||||
this._ws.addEventListener('open', () => fulfill({success: true}));
|
||||
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.
|
||||
// In Web, all IO callbacks (e.g. WebSocket callbacks)
|
||||
|
|
@ -348,8 +348,15 @@ export class WebSocketTransport implements ConnectionTransport {
|
|||
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) {
|
||||
await this._connect;
|
||||
await this._ensureConnected();
|
||||
this._ws.send(message);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue