41 lines
1.1 KiB
Markdown
41 lines
1.1 KiB
Markdown
# Deferred Promises
|
|
|
|
The `Deferred` module provides utilities for creating promises with exposed resolve/reject functions and typed error handling. This is particularly useful for managing asynchronous operations where you need external control over promise resolution.
|
|
|
|
## API
|
|
|
|
```typescript
|
|
// Creates a Deferred promise
|
|
export declare const defer: <T, E = T>() => Deferred<T, E>;
|
|
|
|
// Promise with exposed resolve/reject functions and typed error
|
|
export type Deferred<T, E = T> = CustomPromise<T, E> & {
|
|
resolve: (arg: T) => void;
|
|
reject: (arg: E) => void;
|
|
};
|
|
|
|
// Creates a Promise with strongly typed error
|
|
export declare function makePromise<T, E>(
|
|
executor: (resolve: (value: T | PromiseLike<T>) => void, reject: (reason: E) => void) => void,
|
|
): CustomPromise<T, E>;
|
|
```
|
|
|
|
## Example
|
|
|
|
```typescript
|
|
import { defer } from '@welshman/lib';
|
|
|
|
// Create a deferred promise
|
|
const deferred = defer<string>();
|
|
|
|
// Resolve it externally
|
|
setTimeout(() => {
|
|
deferred.resolve('Hello, world!');
|
|
}, 1000);
|
|
|
|
// Use it like a regular promise
|
|
deferred.then(value => {
|
|
console.log(value); // "Hello, world!"
|
|
});
|
|
```
|