Skip to content

emmveqz/js-utils

Repository files navigation

Installation

npm package: @emmveqz/js-utils

npm install @emmveqz/js-utils

Returns an iterator, yielding the value of fulfilled promises first.
In case a promise is rejected, the iterator will yield an Error instance instead.

Usage:

const promises: Promise<string>[] = [
  new Promise((resolve) => {
    setTimeout(() => {
      resolve('this will yield second')
    }, 3500)
  }),
  new Promise((resolve) => {
    setTimeout(() => {
      resolve('end')
    }, 7500)
  }),
  new Promise((_, reject) => {
    setTimeout(() => {
      reject('this will yield an error')
    }, 5500)
  }),
  new Promise((resolve) => {
    setTimeout(() => {
      resolve('this will yield first')
    }, 1500)
  }),
]

const someAsyncFunc = async () => {
  const itor = racePromisesIterator(promises)
  let result = await itor.next()

  while (!result.done) {
    console.log(result.value instanceof Error
      ? result.value.message
      : result.value)

    result = await itor.next()
  }
}

Returns a Promise<'fulfilled'|'pending'|'rejected'> for the state of a given promise. Worth noting it does not wait for such promise to be resolved, but it still waits for the next tick, as it is an async function.

Usage:

const promise = new Promise((resolve) => {
  setTimeout(resolve, 5000)
})

const someAsyncFunc = async (): Promise<string|Error> => {
  const promiseState = await getPromiseState(promise)

  switch (promiseState) {
    case 'fulfilled':
      return 'go'
    case 'pending':
      return 'wait'
    case 'rejected':
      return new Error('promise has failed')
  }
}