watchable-promise 2.0.1 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +17 -1
- package/dist/index.js.map +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -67,6 +67,27 @@ npm install watchable-promise
|
|
|
67
67
|
console.log(promise.value); // "foo"
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
+
- You can call `.resolve()` or `.reject()` on a `WatchablePromise` instance to resolve or reject it externally:
|
|
71
|
+
|
|
72
|
+
```javascript
|
|
73
|
+
import WatchablePromise from "watchable-promise";
|
|
74
|
+
|
|
75
|
+
// Resolving
|
|
76
|
+
const p1 = new WatchablePromise(resolve => {});
|
|
77
|
+
p1.resolve("foo");
|
|
78
|
+
const val = await p1;
|
|
79
|
+
console.log(val) // "foo"
|
|
80
|
+
|
|
81
|
+
// Rejecting
|
|
82
|
+
const p2 = new WatchablePromise((resolve, reject) => {});
|
|
83
|
+
p2.reject("bar");
|
|
84
|
+
try {
|
|
85
|
+
await p2;
|
|
86
|
+
} catch (err) {
|
|
87
|
+
console.log(err) // "bar"
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
70
91
|
## License
|
|
71
92
|
|
|
72
93
|
`watchable-promise` is released under the Apache 2.0 License. See the enclosed [`LICENSE`](./LICENSE) for details.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
declare class WatchablePromise<T> extends Promise<T> {
|
|
2
2
|
#private;
|
|
3
3
|
constructor(executor: (resolve: (value: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void);
|
|
4
|
+
resolve(value: T): void;
|
|
5
|
+
reject(reason?: any): void;
|
|
4
6
|
get settled(): boolean;
|
|
5
7
|
get state(): "pending" | "fulfilled" | "rejected";
|
|
6
8
|
get value(): any;
|
package/dist/index.js
CHANGED
|
@@ -3,6 +3,8 @@ var WatchablePromise = class _WatchablePromise extends Promise {
|
|
|
3
3
|
#settled = false;
|
|
4
4
|
#state = "pending";
|
|
5
5
|
#value;
|
|
6
|
+
#resolve;
|
|
7
|
+
#reject;
|
|
6
8
|
constructor(executor) {
|
|
7
9
|
let resolve;
|
|
8
10
|
let reject;
|
|
@@ -10,6 +12,8 @@ var WatchablePromise = class _WatchablePromise extends Promise {
|
|
|
10
12
|
resolve = res;
|
|
11
13
|
reject = rej;
|
|
12
14
|
});
|
|
15
|
+
this.#resolve = resolve;
|
|
16
|
+
this.#reject = reject;
|
|
13
17
|
this.then(
|
|
14
18
|
(value) => {
|
|
15
19
|
this.#state = "fulfilled";
|
|
@@ -22,7 +26,19 @@ var WatchablePromise = class _WatchablePromise extends Promise {
|
|
|
22
26
|
this.#settled = true;
|
|
23
27
|
}
|
|
24
28
|
);
|
|
25
|
-
executor(resolve, reject);
|
|
29
|
+
executor(this.#resolve, this.#reject);
|
|
30
|
+
}
|
|
31
|
+
resolve(value) {
|
|
32
|
+
this.#state = "fulfilled";
|
|
33
|
+
this.#value = value;
|
|
34
|
+
this.#settled = true;
|
|
35
|
+
this.#resolve(value);
|
|
36
|
+
}
|
|
37
|
+
reject(reason) {
|
|
38
|
+
this.#state = "rejected";
|
|
39
|
+
this.#value = reason;
|
|
40
|
+
this.#settled = true;
|
|
41
|
+
this.#reject(reason);
|
|
26
42
|
}
|
|
27
43
|
get settled() {
|
|
28
44
|
return this.#settled;
|
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["class WatchablePromise<T> extends Promise<T> {\n #settled = false;\n #state: \"pending\" | \"fulfilled\" | \"rejected\" = \"pending\";\n #value: T | any;\n\n constructor(\n executor: (\n resolve: (value: T | PromiseLike<T>) => void,\n reject: (reason?: any) => void,\n ) => void,\n ) {\n let resolve: (value: T | PromiseLike<T>) => void;\n let reject: (reason?: any) => void;\n\n super((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n this.then(\n (value) => {\n this.#state = \"fulfilled\";\n this.#value = value;\n this.#settled = true;\n },\n (reason) => {\n this.#state = \"rejected\";\n this.#value = reason;\n this.#settled = true;\n },\n );\n\n
|
|
5
|
-
"mappings": ";AAAA,IAAM,mBAAN,MAAM,0BAA4B,QAAW;AAAA,EAC3C,WAAW;AAAA,EACX,SAA+C;AAAA,EAC/C;AAAA,EAEA,YACE,UAIA;AACA,QAAI;AACJ,QAAI;AAEJ,UAAM,CAAC,KAAK,QAAQ;AAClB,gBAAU;AACV,eAAS;AAAA,IACX,CAAC;
|
|
4
|
+
"sourcesContent": ["class WatchablePromise<T> extends Promise<T> {\n #settled = false;\n #state: \"pending\" | \"fulfilled\" | \"rejected\" = \"pending\";\n #value: T | any;\n #resolve: (value: T | PromiseLike<T>) => void;\n #reject: (reason?: any) => void;\n\n constructor(\n executor: (\n resolve: (value: T | PromiseLike<T>) => void,\n reject: (reason?: any) => void,\n ) => void,\n ) {\n let resolve: (value: T | PromiseLike<T>) => void;\n let reject: (reason?: any) => void;\n\n super((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n // @ts-ignore\n this.#resolve = resolve;\n // @ts-ignore\n this.#reject = reject;\n\n this.then(\n (value) => {\n this.#state = \"fulfilled\";\n this.#value = value;\n this.#settled = true;\n },\n (reason) => {\n this.#state = \"rejected\";\n this.#value = reason;\n this.#settled = true;\n },\n );\n\n executor(this.#resolve, this.#reject);\n }\n\n resolve(value: T) {\n this.#state = \"fulfilled\";\n this.#value = value;\n this.#settled = true;\n this.#resolve(value);\n }\n\n reject(reason?: any) {\n this.#state = \"rejected\";\n this.#value = reason;\n this.#settled = true;\n this.#reject(reason);\n }\n\n get settled() {\n return this.#settled;\n }\n\n get state() {\n return this.#state;\n }\n\n get value() {\n return this.#value;\n }\n\n static from<T>(existingPromise: Promise<T>): WatchablePromise<T> {\n return new WatchablePromise<T>((resolve, reject) => {\n existingPromise.then(resolve, reject);\n });\n }\n\n static withResolvers<T>() {\n let resolve: (value: T | PromiseLike<T>) => void;\n let reject: (reason?: any) => void;\n const promise = new WatchablePromise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n // @ts-ignore\n return { promise, resolve, reject };\n }\n\n static get [Symbol.species]() {\n return Promise;\n }\n\n get [Symbol.toStringTag]() {\n return \"WatchablePromise\";\n }\n}\n\nexport default WatchablePromise;\n"],
|
|
5
|
+
"mappings": ";AAAA,IAAM,mBAAN,MAAM,0BAA4B,QAAW;AAAA,EAC3C,WAAW;AAAA,EACX,SAA+C;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YACE,UAIA;AACA,QAAI;AACJ,QAAI;AAEJ,UAAM,CAAC,KAAK,QAAQ;AAClB,gBAAU;AACV,eAAS;AAAA,IACX,CAAC;AAGD,SAAK,WAAW;AAEhB,SAAK,UAAU;AAEf,SAAK;AAAA,MACH,CAAC,UAAU;AACT,aAAK,SAAS;AACd,aAAK,SAAS;AACd,aAAK,WAAW;AAAA,MAClB;AAAA,MACA,CAAC,WAAW;AACV,aAAK,SAAS;AACd,aAAK,SAAS;AACd,aAAK,WAAW;AAAA,MAClB;AAAA,IACF;AAEA,aAAS,KAAK,UAAU,KAAK,OAAO;AAAA,EACtC;AAAA,EAEA,QAAQ,OAAU;AAChB,SAAK,SAAS;AACd,SAAK,SAAS;AACd,SAAK,WAAW;AAChB,SAAK,SAAS,KAAK;AAAA,EACrB;AAAA,EAEA,OAAO,QAAc;AACnB,SAAK,SAAS;AACd,SAAK,SAAS;AACd,SAAK,WAAW;AAChB,SAAK,QAAQ,MAAM;AAAA,EACrB;AAAA,EAEA,IAAI,UAAU;AACZ,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,QAAQ;AACV,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,QAAQ;AACV,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,OAAO,KAAQ,iBAAkD;AAC/D,WAAO,IAAI,kBAAoB,CAAC,SAAS,WAAW;AAClD,sBAAgB,KAAK,SAAS,MAAM;AAAA,IACtC,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,gBAAmB;AACxB,QAAI;AACJ,QAAI;AACJ,UAAM,UAAU,IAAI,kBAAoB,CAAC,KAAK,QAAQ;AACpD,gBAAU;AACV,eAAS;AAAA,IACX,CAAC;AAED,WAAO,EAAE,SAAS,SAAS,OAAO;AAAA,EACpC;AAAA,EAEA,YAAY,OAAO,OAAO,IAAI;AAC5B,WAAO;AAAA,EACT;AAAA,EAEA,KAAK,OAAO,WAAW,IAAI;AACzB,WAAO;AAAA,EACT;AACF;AAEA,IAAO,gBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|