suggestion: add `promiseState()` to `@std/async`
- Dominant language
- TypeScript
- Stars
- 3.6k
- Forks
- 681
- PR merge metrics
- No merged PRs in 30d
Description
Please add this utility to check the Promise status
```ts
export type PromiseState = 'fulfilled' | 'rejected' | 'pending';
var t = Symbol('t');
/**
* Return state (fulfilled/rejected/pending) of a promise
*
* ```ts
* import { assertEquals } from "@std/assert";
* import { promiseState } from "@std/async/promise-state";
*
* assertEquals(await promiseState(Promise.resolve("value")), "fulfilled");
* assertEquals(await promiseState(Promise.reject("error")), "rejected");
* assertEquals(await promiseState(new Promise(() => {})), "pending");
* ```
*/
export function promiseState(p: Promise): Promise {
return Promise.race([p, t]).then(
v => (v === t ? 'pending' : 'fulfilled'),
() => 'rejected'
);
}
export type PromiseStateOptions = {
/**
* If true, the promise state is checked immediately without waiting for the next event loop.
*/
immediate?: boolean;
};
function flushPromises() {
return new Promise(resolve => setTimeout(resolve, 0));
}
export async function promiseState2(
p: Promise,
{ immediate }: PromiseStateOptions = {}
): Promise {
if (!immediate) await flushPromises();
return Promise.race([p, t]).then(
v => (v === t ? 'pending' : 'fulfilled'),
() => 'rejected'
);
}
```
Contributor guide
Assessment
This issue has not been assessed yet.