mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-04-25 10:32:14 +00:00
refactor: clean up dial timeout abort
This commit is contained in:
parent
a5b54a7017
commit
b6cd48b798
@ -81,24 +81,18 @@ class Dialer {
|
||||
const signals = [timeoutController.signal]
|
||||
options.signal && signals.push(options.signal)
|
||||
const signal = anySignal(signals)
|
||||
const timeoutPromise = delay.reject(this.timeout, {
|
||||
value: errCode(new Error('Dial timed out'), codes.ERR_TIMEOUT)
|
||||
})
|
||||
const timeoutId = setTimeout(() => timeoutController.abort(), this.timeout)
|
||||
|
||||
try {
|
||||
// Race the dial request and the timeout
|
||||
const dialResult = await Promise.race([
|
||||
dialRequest.run({
|
||||
...options,
|
||||
signal
|
||||
}),
|
||||
timeoutPromise
|
||||
])
|
||||
timeoutPromise.clear()
|
||||
const dialResult = await dialRequest.run({ ...options, signal })
|
||||
clearTimeout(timeoutId)
|
||||
return dialResult
|
||||
} catch (err) {
|
||||
// Error is a timeout
|
||||
if (timeoutController.signal.aborted) {
|
||||
err = errCode(err, codes.ERR_TIMEOUT)
|
||||
}
|
||||
log.error(err)
|
||||
timeoutController.abort()
|
||||
throw err
|
||||
}
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ class DialRequest {
|
||||
try {
|
||||
const signal = dialAbortControllers[i].signal
|
||||
conn = await this.dialAction(addr, { ...options, signal: anySignal([signal, options.signal]) })
|
||||
// Remove the successful AbortController so it is no aborted
|
||||
// Remove the successful AbortController so it is not aborted
|
||||
dialAbortControllers.splice(i, 1)
|
||||
} catch (err) {
|
||||
throw err
|
||||
|
@ -16,6 +16,7 @@ const delay = require('delay')
|
||||
const pDefer = require('p-defer')
|
||||
const pipe = require('it-pipe')
|
||||
const AggregateError = require('aggregate-error')
|
||||
const { AbortError } = require('libp2p-interfaces/src/transport/errors')
|
||||
|
||||
const Libp2p = require('../../src')
|
||||
const Dialer = require('../../src/dialer')
|
||||
@ -142,6 +143,7 @@ describe('Dialing (direct, TCP)', () => {
|
||||
expect(addr.toString()).to.eql(remoteAddr.toString())
|
||||
await delay(60)
|
||||
expect(options.signal.aborted).to.equal(true)
|
||||
throw new AbortError()
|
||||
})
|
||||
|
||||
await expect(dialer.connectToMultiaddr(remoteAddr))
|
||||
|
@ -16,6 +16,7 @@ const multiaddr = require('multiaddr')
|
||||
const PeerId = require('peer-id')
|
||||
const PeerInfo = require('peer-info')
|
||||
const AggregateError = require('aggregate-error')
|
||||
const { AbortError } = require('libp2p-interfaces/src/transport/errors')
|
||||
|
||||
const { codes: ErrorCodes } = require('../../src/errors')
|
||||
const Constants = require('../../src/constants')
|
||||
@ -130,6 +131,7 @@ describe('Dialing (direct, WebSockets)', () => {
|
||||
expect(addr.toString()).to.eql(remoteAddr.toString())
|
||||
await delay(60)
|
||||
expect(options.signal.aborted).to.equal(true)
|
||||
throw new AbortError()
|
||||
})
|
||||
|
||||
await expect(dialer.connectToMultiaddr(remoteAddr))
|
||||
|
Loading…
x
Reference in New Issue
Block a user