proxy-facades 1.5.0 → 1.7.0
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/dist/commonjs/retsync.d.ts +11 -0
- package/dist/commonjs/retsync.d.ts.map +1 -1
- package/dist/commonjs/retsync.js +10 -1
- package/dist/commonjs/retsync.js.map +1 -1
- package/dist/esm/retsync.d.ts +11 -0
- package/dist/esm/retsync.d.ts.map +1 -1
- package/dist/esm/retsync.js +10 -2
- package/dist/esm/retsync.js.map +1 -1
- package/package.json +1 -1
- package/retsync.ts +10 -2
|
@@ -20,6 +20,7 @@ export declare const _global: {
|
|
|
20
20
|
};
|
|
21
21
|
/**
|
|
22
22
|
* Let's you run retsync code and wait, till it is finished.
|
|
23
|
+
* Errors by promises won't be catched. They will fall down, so you can catch them. Error state is not cached, so it will always be tried fresh on every retsync2promise run.
|
|
23
24
|
* @param repeatableFn
|
|
24
25
|
* @param options
|
|
25
26
|
*/
|
|
@@ -37,12 +38,22 @@ export declare function promise2retsync<T>(savedPromise: Promise<T>): T;
|
|
|
37
38
|
* <code>asyncResource2retsync( async() => {...load the avatar...}, myUser, "getAvatar");</code>
|
|
38
39
|
* So the User#getAvatar is, what uniquely identifies the loaderFn here.
|
|
39
40
|
* </p>
|
|
41
|
+
* <p>
|
|
42
|
+
* Error handling: Failed promises (loaderFn fails) are forgotten, so next time the retsync code invokes asyncResource2retsync, it is tried fresh again
|
|
43
|
+
* </p>
|
|
40
44
|
* @param loaderFn
|
|
41
45
|
* @param idObj object to associate this call to. undefined means globally and the idKey primitive value is the only key.
|
|
42
46
|
* @param idKey Additional primitive key under idObj.
|
|
43
47
|
* @see cleanResource
|
|
44
48
|
*/
|
|
45
49
|
export declare function asyncResource2retsync<T>(loaderFn: () => Promise<T>, idObj: object | undefined, idKey?: (string | number)): T;
|
|
50
|
+
/**
|
|
51
|
+
* Cleans the promise and therefore the result behind the given obj+key like used in {@link asyncResource2retsync}.
|
|
52
|
+
* Call this i.e. on the event that the resource has change and you want to "invalidate the cached value", so it will be fetched fresh next time.
|
|
53
|
+
* @param idObj
|
|
54
|
+
* @param idKey
|
|
55
|
+
*/
|
|
56
|
+
export declare function cleanResource(idObj: object | undefined, idKey?: (string | number)): void;
|
|
46
57
|
export declare class RetsyncWaitsForPromiseException extends Error {
|
|
47
58
|
promise: Promise<any>;
|
|
48
59
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retsync.d.ts","sourceRoot":"","sources":["../../retsync.ts"],"names":[],"mappings":"AASA,KAAK,sBAAsB,GAAG;IAC1B;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACvB,CAAA;AAED;;GAEG;AACH,qBAAa,mBAAmB;CAE/B;AAED;;GAEG;AACH,eAAO,MAAM,OAAO;;0BAEM,mBAAmB;;;CAG5C,CAAA;AAED
|
|
1
|
+
{"version":3,"file":"retsync.d.ts","sourceRoot":"","sources":["../../retsync.ts"],"names":[],"mappings":"AASA,KAAK,sBAAsB,GAAG;IAC1B;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACvB,CAAA;AAED;;GAEG;AACH,qBAAa,mBAAmB;CAE/B;AAED;;GAEG;AACH,eAAO,MAAM,OAAO;;0BAEM,mBAAmB;;;CAG5C,CAAA;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,CAAC,CAAC,CA0DhH;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAM9D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAK,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,GAAC,MAAM,CAAC,GAAG,CAAC,CA6BzH;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,GAAC,MAAM,CAAC,QAS/E;AAID,qBAAa,+BAAgC,SAAQ,KAAK;IACtD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACtB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;gBAET,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC;CAIpC;AAED,wBAAgB,6BAA6B,SAI5C;;AAID;;GAEG"}
|
package/dist/commonjs/retsync.js
CHANGED
|
@@ -9,6 +9,7 @@ exports.RetsyncWaitsForPromiseException = exports._global = exports.Retsync2prom
|
|
|
9
9
|
exports.retsync2promise = retsync2promise;
|
|
10
10
|
exports.promise2retsync = promise2retsync;
|
|
11
11
|
exports.asyncResource2retsync = asyncResource2retsync;
|
|
12
|
+
exports.cleanResource = cleanResource;
|
|
12
13
|
exports.checkThatCallerHandlesRetsync = checkThatCallerHandlesRetsync;
|
|
13
14
|
const Util_1 = require("./Util");
|
|
14
15
|
/**
|
|
@@ -29,6 +30,7 @@ exports._global = new class {
|
|
|
29
30
|
};
|
|
30
31
|
/**
|
|
31
32
|
* Let's you run retsync code and wait, till it is finished.
|
|
33
|
+
* Errors by promises won't be catched. They will fall down, so you can catch them. Error state is not cached, so it will always be tried fresh on every retsync2promise run.
|
|
32
34
|
* @param repeatableFn
|
|
33
35
|
* @param options
|
|
34
36
|
*/
|
|
@@ -107,6 +109,9 @@ function promise2retsync(savedPromise) {
|
|
|
107
109
|
* <code>asyncResource2retsync( async() => {...load the avatar...}, myUser, "getAvatar");</code>
|
|
108
110
|
* So the User#getAvatar is, what uniquely identifies the loaderFn here.
|
|
109
111
|
* </p>
|
|
112
|
+
* <p>
|
|
113
|
+
* Error handling: Failed promises (loaderFn fails) are forgotten, so next time the retsync code invokes asyncResource2retsync, it is tried fresh again
|
|
114
|
+
* </p>
|
|
110
115
|
* @param loaderFn
|
|
111
116
|
* @param idObj object to associate this call to. undefined means globally and the idKey primitive value is the only key.
|
|
112
117
|
* @param idKey Additional primitive key under idObj.
|
|
@@ -123,6 +128,10 @@ function asyncResource2retsync(loaderFn, idObj, idKey) {
|
|
|
123
128
|
if (!promise) {
|
|
124
129
|
promise = loaderFn();
|
|
125
130
|
promisesForIdObj.set(idKey, promise);
|
|
131
|
+
// Forget on error:
|
|
132
|
+
promise.catch(() => {
|
|
133
|
+
promisesForIdObj.delete(idKey);
|
|
134
|
+
});
|
|
126
135
|
}
|
|
127
136
|
try {
|
|
128
137
|
return promise2retsync(promise);
|
|
@@ -152,7 +161,7 @@ function cleanResource(idObj, idKey) {
|
|
|
152
161
|
}
|
|
153
162
|
class RetsyncWaitsForPromiseException extends Error {
|
|
154
163
|
constructor(promise) {
|
|
155
|
-
super("Some retsync style code (see call stack / caller of promise2retsync) wants to await an async operation. To make this possible, you need to
|
|
164
|
+
super("Some retsync style code (see call stack / caller of promise2retsync) wants to await an async operation. To make this possible, you need to wrap it at some ancestor caller level with retsync2promise. I.e. 'const result = await retsync2promise(() => {...your **retryable*** - synchronous code...}});");
|
|
156
165
|
this.promise = promise;
|
|
157
166
|
}
|
|
158
167
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retsync.js","sourceRoot":"","sources":["../../retsync.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,0JAA0J;AAC1J,2CAA2C;AAC3C,2HAA2H;AAC3H,8SAA8S;;;
|
|
1
|
+
{"version":3,"file":"retsync.js","sourceRoot":"","sources":["../../retsync.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,0JAA0J;AAC1J,2CAA2C;AAC3C,2HAA2H;AAC3H,8SAA8S;;;AAmC9S,0CA0DC;AAMD,0CAMC;AAkBD,sDA6BC;AAQD,sCASC;AAiBD,sEAIC;AA3LD,iCAAyC;AASzC;;GAEG;AACH,MAAa,mBAAmB;CAE/B;AAFD,kDAEC;AAED;;GAEG;AACU,QAAA,OAAO,GAAG,IAAI;IAAA;QACvB,0BAAqB,GAAG,IAAI,OAAO,EAAyB,CAAC;QAE7D,cAAS,GAAG,EAAE,CAAC;QACf,qBAAgB,GAAG,IAAA,wBAAiB,EAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAiD,CAAC,CAAA;IAC3G,CAAC;CAAA,CAAA;AAED;;;;;GAKG;AACI,KAAK,UAAU,eAAe,CAAI,YAAqB,EAAE,UAAkC,EAAE;IAChG;;OAEG;IACH,SAAS,eAAe;QACpB,MAAM,wBAAwB,GAAG,eAAO,CAAC,mBAAmB,CAAC;QAC7D,IAAI,CAAC;YACD,eAAO,CAAC,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC;YACxD,OAAO,YAAY,EAAE,CAAC;QAC1B,CAAC;gBACO,CAAC;YACL,eAAO,CAAC,mBAAmB,GAAG,wBAAwB,CAAC;QAC3D,CAAC;IACL,CAAC;IAED,OAAM,IAAI,EAAE,CAAC;QACT,IAAI,CAAC;YACD,OAAO,eAAe,EAAE,CAAC;QAC7B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,+BAA+B,EAAE,CAAC;gBAC5D,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,IAAK,OAAO,CAAC,UAAU,KAAK,KAAK,CAAC,EAAE,CAAC;oBAChF,MAAM,UAAU,GAAG,mDAAmD,CAAA;oBACtE,kFAAkF;oBAClF,IAAI,CAAC;wBACD,eAAe,EAAE,CAAC;wBAClB,MAAM,IAAI,KAAK,CAAC,mMAAmM,UAAU,EAAE,EAAE,EAAC,KAAK,EAAE,CAAC,EAAC,CAAC,CAAC;oBACjP,CAAC;oBAAC,OAAO,QAAQ,EAAE,CAAC;wBAChB,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,IAAI,QAAQ,YAAY,+BAA+B,CAAC,EAAE,CAAC;4BAC9E,MAAM,IAAI,KAAK,CAAC,6JAA6J,UAAU,2BAA2B,CAAC,CAAC,KAAK,+BAA+B,EAAE,EAAC,KAAK,EAAE,QAAQ,EAAC,CAAC,CAAC;wBACjR,CAAC;wBAED,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,sHAAsH;wBAEvJ,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;4BACjD,MAAM,IAAI,KAAK,CAAC,yKAAyK,UAAU,2BAA2B,CAAC,CAAC,KAAK,+BAA+B,EAAE,EAAC,KAAK,EAAE,QAAQ,EAAC,CAAC,CAAC;wBAC7R,CAAC;wBACD,IAAI,QAAQ,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;4BACjC,CAAC,CAAC,OAAO,GAAG,6FAA6F,UAAU,EAAE,EAAE,EAAC,KAAK,EAAE,IAAI,KAAK,CAAC,+CAA+C,CAAC,EAAC,CAAC;4BAC3L,MAAM,CAAC,CAAC;wBACZ,CAAC;oBACL,CAAC;gBACL,CAAC;gBAED,eAAO,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;gBAC9D,gDAAgD;YACpD,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,CAAC;YACZ,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,SAAS,QAAQ,CAAC,KAAc;QAC5B,OAAO,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,CAAC,yBAAyB,EAAC,EAAE,CAAC,CAAA;IAC1D,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAgB,eAAe,CAAI,YAAwB;IACvD,IAAG,eAAO,CAAC,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QACjD,OAAO,eAAO,CAAC,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAM,CAAC;IAChE,CAAC;IAED,MAAM,IAAI,+BAA+B,CAAC,YAAY,CAAC,CAAA;AAC3D,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,qBAAqB,CAAI,QAAyB,EAAE,KAAyB,EAAE,KAAuB;IAClH,kBAAkB;IAClB,IAAG,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,GAAG,KAAK,IAAI,eAAO,CAAC,SAAS,CAAC;IAEnC,MAAM,gBAAgB,GAAG,eAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAE7D,IAAI,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAG,CAAC,OAAO,EAAE,CAAC;QACV,OAAO,GAAG,QAAQ,EAAE,CAAC;QACrB,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACrC,mBAAmB;QACnB,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;YACf,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACP,CAAC;IACD,IAAI,CAAC;QACD,OAAO,eAAe,CAAC,OAAqB,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,CAAC,EAAE,CAAC;QACP,6DAA6D;QAC7D,IAAG,CAAC,YAAY,+BAA+B,EAAE,CAAC;YAC9C,CAAC,CAAC,UAAU,GAAG,KAAK,CAAC;QACzB,CAAC;QACD,MAAM,CAAC,CAAC;IACZ,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,KAAyB,EAAE,KAAuB;IAC5E,kBAAkB;IAClB,IAAG,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,GAAG,KAAK,IAAI,eAAO,CAAC,SAAS,CAAC;IACnC,MAAM,gBAAgB,GAAG,eAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7D,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAID,MAAa,+BAAgC,SAAQ,KAAK;IAOtD,YAAY,OAAqB;QAC7B,KAAK,CAAC,2SAA2S,CAAC,CAAC;QACnT,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;CACJ;AAXD,0EAWC;AAED,SAAgB,6BAA6B;IACzC,IAAG,CAAC,eAAO,CAAC,mBAAmB,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,mQAAmQ,CAAC,CAAC;IACzR,CAAC;AACL,CAAC;AAID;;GAEG;AACH,oEAAoE;AACpE,uIAAuI;AACvI,GAAG"}
|
package/dist/esm/retsync.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ export declare const _global: {
|
|
|
20
20
|
};
|
|
21
21
|
/**
|
|
22
22
|
* Let's you run retsync code and wait, till it is finished.
|
|
23
|
+
* Errors by promises won't be catched. They will fall down, so you can catch them. Error state is not cached, so it will always be tried fresh on every retsync2promise run.
|
|
23
24
|
* @param repeatableFn
|
|
24
25
|
* @param options
|
|
25
26
|
*/
|
|
@@ -37,12 +38,22 @@ export declare function promise2retsync<T>(savedPromise: Promise<T>): T;
|
|
|
37
38
|
* <code>asyncResource2retsync( async() => {...load the avatar...}, myUser, "getAvatar");</code>
|
|
38
39
|
* So the User#getAvatar is, what uniquely identifies the loaderFn here.
|
|
39
40
|
* </p>
|
|
41
|
+
* <p>
|
|
42
|
+
* Error handling: Failed promises (loaderFn fails) are forgotten, so next time the retsync code invokes asyncResource2retsync, it is tried fresh again
|
|
43
|
+
* </p>
|
|
40
44
|
* @param loaderFn
|
|
41
45
|
* @param idObj object to associate this call to. undefined means globally and the idKey primitive value is the only key.
|
|
42
46
|
* @param idKey Additional primitive key under idObj.
|
|
43
47
|
* @see cleanResource
|
|
44
48
|
*/
|
|
45
49
|
export declare function asyncResource2retsync<T>(loaderFn: () => Promise<T>, idObj: object | undefined, idKey?: (string | number)): T;
|
|
50
|
+
/**
|
|
51
|
+
* Cleans the promise and therefore the result behind the given obj+key like used in {@link asyncResource2retsync}.
|
|
52
|
+
* Call this i.e. on the event that the resource has change and you want to "invalidate the cached value", so it will be fetched fresh next time.
|
|
53
|
+
* @param idObj
|
|
54
|
+
* @param idKey
|
|
55
|
+
*/
|
|
56
|
+
export declare function cleanResource(idObj: object | undefined, idKey?: (string | number)): void;
|
|
46
57
|
export declare class RetsyncWaitsForPromiseException extends Error {
|
|
47
58
|
promise: Promise<any>;
|
|
48
59
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retsync.d.ts","sourceRoot":"","sources":["../../retsync.ts"],"names":[],"mappings":"AASA,KAAK,sBAAsB,GAAG;IAC1B;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACvB,CAAA;AAED;;GAEG;AACH,qBAAa,mBAAmB;CAE/B;AAED;;GAEG;AACH,eAAO,MAAM,OAAO;;0BAEM,mBAAmB;;;CAG5C,CAAA;AAED
|
|
1
|
+
{"version":3,"file":"retsync.d.ts","sourceRoot":"","sources":["../../retsync.ts"],"names":[],"mappings":"AASA,KAAK,sBAAsB,GAAG;IAC1B;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACvB,CAAA;AAED;;GAEG;AACH,qBAAa,mBAAmB;CAE/B;AAED;;GAEG;AACH,eAAO,MAAM,OAAO;;0BAEM,mBAAmB;;;CAG5C,CAAA;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,CAAC,CAAC,CA0DhH;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAM9D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAK,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,GAAC,MAAM,CAAC,GAAG,CAAC,CA6BzH;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,GAAC,MAAM,CAAC,QAS/E;AAID,qBAAa,+BAAgC,SAAQ,KAAK;IACtD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACtB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;gBAET,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC;CAIpC;AAED,wBAAgB,6BAA6B,SAI5C;;AAID;;GAEG"}
|
package/dist/esm/retsync.js
CHANGED
|
@@ -21,6 +21,7 @@ export const _global = new class {
|
|
|
21
21
|
};
|
|
22
22
|
/**
|
|
23
23
|
* Let's you run retsync code and wait, till it is finished.
|
|
24
|
+
* Errors by promises won't be catched. They will fall down, so you can catch them. Error state is not cached, so it will always be tried fresh on every retsync2promise run.
|
|
24
25
|
* @param repeatableFn
|
|
25
26
|
* @param options
|
|
26
27
|
*/
|
|
@@ -99,6 +100,9 @@ export function promise2retsync(savedPromise) {
|
|
|
99
100
|
* <code>asyncResource2retsync( async() => {...load the avatar...}, myUser, "getAvatar");</code>
|
|
100
101
|
* So the User#getAvatar is, what uniquely identifies the loaderFn here.
|
|
101
102
|
* </p>
|
|
103
|
+
* <p>
|
|
104
|
+
* Error handling: Failed promises (loaderFn fails) are forgotten, so next time the retsync code invokes asyncResource2retsync, it is tried fresh again
|
|
105
|
+
* </p>
|
|
102
106
|
* @param loaderFn
|
|
103
107
|
* @param idObj object to associate this call to. undefined means globally and the idKey primitive value is the only key.
|
|
104
108
|
* @param idKey Additional primitive key under idObj.
|
|
@@ -115,6 +119,10 @@ export function asyncResource2retsync(loaderFn, idObj, idKey) {
|
|
|
115
119
|
if (!promise) {
|
|
116
120
|
promise = loaderFn();
|
|
117
121
|
promisesForIdObj.set(idKey, promise);
|
|
122
|
+
// Forget on error:
|
|
123
|
+
promise.catch(() => {
|
|
124
|
+
promisesForIdObj.delete(idKey);
|
|
125
|
+
});
|
|
118
126
|
}
|
|
119
127
|
try {
|
|
120
128
|
return promise2retsync(promise);
|
|
@@ -133,7 +141,7 @@ export function asyncResource2retsync(loaderFn, idObj, idKey) {
|
|
|
133
141
|
* @param idObj
|
|
134
142
|
* @param idKey
|
|
135
143
|
*/
|
|
136
|
-
function cleanResource(idObj, idKey) {
|
|
144
|
+
export function cleanResource(idObj, idKey) {
|
|
137
145
|
// Validity check:
|
|
138
146
|
if (!idObj && !idKey) {
|
|
139
147
|
throw new Error("Either idObj or idKey must be specified");
|
|
@@ -144,7 +152,7 @@ function cleanResource(idObj, idKey) {
|
|
|
144
152
|
}
|
|
145
153
|
export class RetsyncWaitsForPromiseException extends Error {
|
|
146
154
|
constructor(promise) {
|
|
147
|
-
super("Some retsync style code (see call stack / caller of promise2retsync) wants to await an async operation. To make this possible, you need to
|
|
155
|
+
super("Some retsync style code (see call stack / caller of promise2retsync) wants to await an async operation. To make this possible, you need to wrap it at some ancestor caller level with retsync2promise. I.e. 'const result = await retsync2promise(() => {...your **retryable*** - synchronous code...}});");
|
|
148
156
|
this.promise = promise;
|
|
149
157
|
}
|
|
150
158
|
}
|
package/dist/esm/retsync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retsync.js","sourceRoot":"","sources":["../../retsync.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,0JAA0J;AAC1J,2CAA2C;AAC3C,2HAA2H;AAC3H,8SAA8S;AAG9S,OAAO,EAAC,iBAAiB,EAAC,MAAM,QAAQ,CAAC;AASzC;;GAEG;AACH,MAAM,OAAO,mBAAmB;CAE/B;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI;IAAA;QACvB,0BAAqB,GAAG,IAAI,OAAO,EAAyB,CAAC;QAE7D,cAAS,GAAG,EAAE,CAAC;QACf,qBAAgB,GAAG,iBAAiB,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAiD,CAAC,CAAA;IAC3G,CAAC;CAAA,CAAA;AAED
|
|
1
|
+
{"version":3,"file":"retsync.js","sourceRoot":"","sources":["../../retsync.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/retsync.ts
CHANGED
|
@@ -33,6 +33,7 @@ export const _global = new class {
|
|
|
33
33
|
|
|
34
34
|
/**
|
|
35
35
|
* Let's you run retsync code and wait, till it is finished.
|
|
36
|
+
* Errors by promises won't be catched. They will fall down, so you can catch them. Error state is not cached, so it will always be tried fresh on every retsync2promise run.
|
|
36
37
|
* @param repeatableFn
|
|
37
38
|
* @param options
|
|
38
39
|
*/
|
|
@@ -116,6 +117,9 @@ export function promise2retsync<T>(savedPromise: Promise<T>): T {
|
|
|
116
117
|
* <code>asyncResource2retsync( async() => {...load the avatar...}, myUser, "getAvatar");</code>
|
|
117
118
|
* So the User#getAvatar is, what uniquely identifies the loaderFn here.
|
|
118
119
|
* </p>
|
|
120
|
+
* <p>
|
|
121
|
+
* Error handling: Failed promises (loaderFn fails) are forgotten, so next time the retsync code invokes asyncResource2retsync, it is tried fresh again
|
|
122
|
+
* </p>
|
|
119
123
|
* @param loaderFn
|
|
120
124
|
* @param idObj object to associate this call to. undefined means globally and the idKey primitive value is the only key.
|
|
121
125
|
* @param idKey Additional primitive key under idObj.
|
|
@@ -135,6 +139,10 @@ export function asyncResource2retsync<T>(loaderFn: ()=> Promise<T>, idObj: objec
|
|
|
135
139
|
if(!promise) {
|
|
136
140
|
promise = loaderFn();
|
|
137
141
|
promisesForIdObj.set(idKey, promise);
|
|
142
|
+
// Forget on error:
|
|
143
|
+
promise.catch(() => {
|
|
144
|
+
promisesForIdObj.delete(idKey);
|
|
145
|
+
});
|
|
138
146
|
}
|
|
139
147
|
try {
|
|
140
148
|
return promise2retsync(promise as Promise<T>);
|
|
@@ -154,7 +162,7 @@ export function asyncResource2retsync<T>(loaderFn: ()=> Promise<T>, idObj: objec
|
|
|
154
162
|
* @param idObj
|
|
155
163
|
* @param idKey
|
|
156
164
|
*/
|
|
157
|
-
function cleanResource(idObj: object | undefined, idKey?: (string|number)) {
|
|
165
|
+
export function cleanResource(idObj: object | undefined, idKey?: (string|number)) {
|
|
158
166
|
// Validity check:
|
|
159
167
|
if(!idObj && !idKey) {
|
|
160
168
|
throw new Error("Either idObj or idKey must be specified");
|
|
@@ -175,7 +183,7 @@ export class RetsyncWaitsForPromiseException extends Error {
|
|
|
175
183
|
checkSaved?: boolean;
|
|
176
184
|
|
|
177
185
|
constructor(promise: Promise<any>) {
|
|
178
|
-
super("Some retsync style code (see call stack / caller of promise2retsync) wants to await an async operation. To make this possible, you need to
|
|
186
|
+
super("Some retsync style code (see call stack / caller of promise2retsync) wants to await an async operation. To make this possible, you need to wrap it at some ancestor caller level with retsync2promise. I.e. 'const result = await retsync2promise(() => {...your **retryable*** - synchronous code...}});");
|
|
179
187
|
this.promise = promise;
|
|
180
188
|
}
|
|
181
189
|
}
|