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.
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
.
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')
}
}