summaryrefslogtreecommitdiff
path: root/cancellationtoken/examples/04-http-request/index.ts
blob: fa8186e825bf7516f1281ee733a15fe496b21a5e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import CancellationToken from 'cancellationtoken'
import * as Https from 'https'

;(async () => {
  await sendRequestWithTimeout(3000)
  console.log()
  await sendRequestWithTimeout(5)
})()

async function sendRequestWithTimeout(ms: number): Promise<void> {
  console.log(`Sending request with a timeout of ${ms}ms...`)
  const {token, cancel} = CancellationToken.timeout(ms)
  const request = Https.get('https://github.com')
  const unregister = token.onCancelled(() => request.abort())

  await new Promise((resolve) => {
    request.on('response', (response) => {
      console.log(`Response: ${response.statusCode} ${response.statusMessage}`)
      resolve()
    })

    request.on('abort', () => {
      request.on('error', () => {}) // ignore socket hang up error
      console.log('Aborted')
      resolve()
    })
  })

  unregister()
  cancel()
}