From 060e8c0e933ef8ac4f79705bac7e9141c716b885 Mon Sep 17 00:00:00 2001 From: John Knox Date: Tue, 28 Jan 2020 11:26:30 -0800 Subject: [PATCH] Fix 'Timed out waiting for device' error Summary: It looks like this timeout was firing every time, causing a misleading error. Fixing by clearing it when the match is found. Reviewed By: passy Differential Revision: D19602640 fbshipit-source-id: b5d97e71a02a014b9498dd56371c1a48f8ae08eb --- src/Client.tsx | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/Client.tsx b/src/Client.tsx index 0d680c479..3aa94c87b 100644 --- a/src/Client.tsx +++ b/src/Client.tsx @@ -202,6 +202,8 @@ export default class Client extends EventEmitter { } reportPlatformFailures( new Promise((resolve, reject) => { + let unsubscribe: () => void = () => {}; + const device = this.store .getState() .connections.devices.find( @@ -212,7 +214,13 @@ export default class Client extends EventEmitter { return; } - const unsubscribe = this.store.subscribe(() => { + const timeout = setTimeout(() => { + unsubscribe(); + const error = `Timed out waiting for device for client ${this.id}`; + console.error(error); + reject(error); + }, 5000); + unsubscribe = this.store.subscribe(() => { const newDeviceList = this.store.getState().connections.devices; if (newDeviceList === this.lastSeenDeviceList) { return; @@ -222,16 +230,11 @@ export default class Client extends EventEmitter { device => device.serial === this.query.device_id, ); if (matchingDevice) { + clearTimeout(timeout); resolve(matchingDevice); unsubscribe(); } }); - setTimeout(() => { - unsubscribe(); - const error = `Timed out waiting for device for client ${this.id}`; - console.error(error); - reject(error); - }, 5000); }), 'client-setMatchingDevice', ).then(device => {