Skip to content

Commit 45bfbd0

Browse files
committed
fix: Improve promise resolve/rejection when connecting to a HEOS device
1 parent 5fb81d8 commit 45bfbd0

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

src/connection/connect.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,34 @@ import { HeosConnection } from './heosConnection'
1010
import { HeosResponse, HeosEvent } from '../types'
1111

1212
function createHeosSocket(address: string, responseParser: ResponseParser): Promise<Socket> {
13+
let hasResolvedOrRejected: boolean = false
14+
1315
return new Promise((resolve, reject) => {
1416
const host: string = address
1517
const port: number = DEFAULT_PORT
1618

1719
try {
1820
const socket: Socket = createConnection({ port, host, localPort: 0 }, () => {
21+
hasResolvedOrRejected = true
1922
resolve(socket)
2023
})
2124

2225
socket.on('data', (data: string) => responseParser.put(data))
23-
socket.on('timeout', () => socket.end())
24-
socket.on('error', console.error)
26+
socket.on('timeout', () => {
27+
if (!hasResolvedOrRejected) {
28+
socket.end()
29+
hasResolvedOrRejected = true
30+
reject(new Error('Socket timeout'))
31+
}
32+
})
33+
socket.on('error', error => {
34+
if (!hasResolvedOrRejected) {
35+
hasResolvedOrRejected = true
36+
reject(error)
37+
} else {
38+
console.error(error)
39+
}
40+
})
2541
} catch (error) {
2642
reject(error)
2743
}

0 commit comments

Comments
 (0)