https://github.com/bramus/watchable-promise
A Promise whose state and value you can read
https://github.com/bramus/watchable-promise
Last synced: 5 months ago
JSON representation
A Promise whose state and value you can read
- Host: GitHub
- URL: https://github.com/bramus/watchable-promise
- Owner: bramus
- License: apache-2.0
- Created: 2026-01-15T20:43:14.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2026-01-19T08:23:52.000Z (5 months ago)
- Last Synced: 2026-01-19T19:37:00.354Z (5 months ago)
- Language: TypeScript
- Homepage:
- Size: 31.3 KB
- Stars: 9
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# watchable-promise
A Promise whose state and value you can read
## Installation
```bash
npm install watchable-promise
```
## Usage
- Directly create a `WatchablePromise` instance:
```javascript
import WatchablePromise from "watchable-promise";
const p = new WatchablePromise(resolve => setTimeout(() => resolve("foo"), 100));
console.log(p.state); // pending
console.log(p.settled); // false
console.log(p.value); // undefined
const val = await p;
console.log(val) // "foo"
console.log(p.state); // fulfilled
console.log(p.settled); // true
console.log(p.value); // "foo"
```
- Using an existing `Promise` instance:
```javascript
import WatchablePromise from 'watchable-promise';
const existingPromise = new Promise(resolve => setTimeout(() => resolve("foo"), 100));
const p = WatchablePromise.from(existingPromise);
console.log(p.state); // pending
console.log(p.settled); // false
console.log(p.value); // undefined
const val = await p;
console.log(val) // "foo"
console.log(p.state); // fulfilled
console.log(p.settled); // true
console.log(p.value); // "foo"
```
- Using `WatchablePromise.withResolvers()`:
```javascript
import WatchablePromise from 'watchable-promise';
const { promise, resolve, reject } = WatchablePromise.withResolvers();
console.log(promise.state); // pending
console.log(promise.settled); // false
console.log(promise.value); // undefined
await resolve("foo");
console.log(promise.state); // fulfilled
console.log(promise.settled); // true
console.log(promise.value); // "foo"
```
- You can call `.resolve()` or `.reject()` on a `WatchablePromise` instance to resolve or reject it externally:
```javascript
import WatchablePromise from "watchable-promise";
// Resolving
const p1 = new WatchablePromise(resolve => {});
p1.resolve("foo");
const val = await p1;
console.log(val) // "foo"
// Rejecting
const p2 = new WatchablePromise((resolve, reject) => {});
p2.reject("bar");
try {
await p2;
} catch (err) {
console.log(err) // "bar"
}
```
## License
`watchable-promise` is released under the Apache 2.0 License. See the enclosed [`LICENSE`](./LICENSE) for details.
## Disclaimer
This is not an officially supported Google product. I just happen to work there.