diff --git a/packages/xen-api/src/index.js b/packages/xen-api/src/index.js index 612381b18..31068b02c 100644 --- a/packages/xen-api/src/index.js +++ b/packages/xen-api/src/index.js @@ -672,12 +672,21 @@ export class Xapi extends EventEmitter { } _interruptOnDisconnect(promise) { - return Promise.race([ - promise, - this._disconnected.then(() => { - throw new Error('disconnected') - }), - ]) + let listener + const pWrapper = new Promise((resolve, reject) => { + promise.then(resolve, reject) + this.on( + DISCONNECTED, + (listener = () => { + reject(new Error('disconnected')) + }) + ) + }) + const clean = () => { + this.removeListener(DISCONNECTED, listener) + } + pWrapper.then(clean, clean) + return pWrapper } _sessionCallRetryOptions = {