Skip to content

Function: timeout()

Call Signature

timeout<T>(timeout, ...values): IPromisE_Timeout<TimeoutResult<T, "all">>

Defined in: packages/promise/src/timeout.ts:103

Creates a new promise that wraps one or more promises and rejects if they do not settle within a specified timeout duration. When multiple promises are provided, they can be processed using methods like all (default), race, any, or allSettled.

Type Parameters

T

T extends [unknown, ...unknown[]]

Parameters

timeout

number

(optional) timeout duration in milliseconds. Default: 10_000 (10 seconds)

values

...T

rest param containing one or more promises/values

Returns

IPromisE_Timeout<TimeoutResult<T, "all">>

Examples

Working with a single promise

javascript
import PromisE from '@supertuils/promise'

PromisE.timeout(
  5000, // timeout after 5000ms
  PromisE.delay(1000), // resolves after 1000ms with value 1000
).then(console.log)
// Result: 1000

Working with a single function

javascript
import PromisE from '@supertuils/promise'

PromisE.timeout(
  5000, // timeout after 5000ms
  () => PromisE.delay(1000), // function resolves after 1000ms with value 1000
).then(console.log)
// Result: 1000

Promise times out & rejected

javascript
import PromisE from '@supertuils/promise'

PromisE.timeout(
  5000, // timeout after 5000ms
  PromisE.delay(20000), // resolves after 20000ms with value 20000
).catch(console.error)
// Error: Error('Timed out after 5000ms')

Working with multiple promises/functions, resolved using "PromisE.all()"

javascript
import PromisE from '@supertuils/promise'

PromisE.timeout(
  5000, // timeout after 5000ms
  PromisE.delay(1000), // resolves after 1000ms with value 1000
  () => PromisE.delay(2000), // resolves after 2000ms with value 2000
  PromisE.delay(3000), // resolves after 3000ms with value 3000
).then(console.log)
// Result: [ 1000, 2000, 3000 ]

Promise times out & but not rejected.

Eg: when API request is taking longer than expected, print a message avoid rejecting the promise.

javascript
import PromisE from '@supertuils/promise'

const promise = PromisE.timeout(
  5000, // timeout after 5000ms
  PromisE.delay(20000), // data promise, resolves after 20000ms with value 20000
)
const data = await promise.catch(err => {
  // promise did not time out, but was rejected because one of the data promises rejected
  if (!promise.timedout) return Promise.reject(err)

  // promise timed out >> print/update UI
  console.log('Request is taking longer than expected......')
  // Now return the data promise which is the result of `PromisE.all(promises)` (default).
  return promise.data
})

Call Signature

timeout<T, TFunc>(options, ...values): IPromisE_Timeout<TimeoutResult<T, TFunc>>

Defined in: packages/promise/src/timeout.ts:144

Type Parameters

T

T extends unknown[]

TFunc

TFunc extends keyof BatchFuncs<T> = keyof BatchFuncs<T>

Parameters

options

TimeoutOptions<T, TFunc>

An options object can be passed with one or more of the following properties:

values

...T

Mix of promises, values and/or functions

Returns

IPromisE_Timeout<TimeoutResult<T, TFunc>>

Example

Working with multiple promises/functions resolved using "PromisE.race()"

javascript
import PromisE from '@supertuils/promise'

PromisE.timeout(
  { // instead of `timeout: number` an object can be used for additional options
    func: 'race', // tells PromisE.timeout to use `PromisE.race(promises)`
    timeout: 5000, // timeout after 5000ms
  },
  PromisE.delay(1000), // resolves after 1000ms with value 1000
  () => PromisE.delay(2000), // resolves after 2000ms with value 2000
  PromisE.delay(3000), // resolves after 3000ms with value 3000
).then(console.log)
// Result: 1000 (Result of `Promise.race(promises)`)