@dadajam4/async-combiner
Advanced tools
Comparing version 0.1.1 to 0.1.2
/*! | ||
* async-combiner v0.0.1 | ||
* async-combiner v0.1.1 | ||
* (c) 2020 dadajam4 | ||
@@ -114,3 +114,3 @@ * Released under the MIT License. | ||
function combine(condition, executor, combineClonePayload = useClonePayload) { | ||
function combine(condition, executor, combineClonePayload = useClonePayload, delay = options.delay) { | ||
return new Promise((resolve, reject) => { | ||
@@ -125,2 +125,6 @@ const resolver = { | ||
if (sameRunning) { | ||
if (sameRunning.delay) { | ||
sameRunning.delay.run(); | ||
} | ||
sameRunning.resolvers.push(resolver); | ||
@@ -133,3 +137,27 @@ return; | ||
resolvers: [resolver], | ||
clone: combineClonePayload | ||
clone: combineClonePayload, | ||
exec: () => { | ||
newRunning.delay && newRunning.delay.clear(); | ||
executor().then(payload => { | ||
resolveResolvers(flattenedCondition, 'resolve', payload); | ||
}).catch(err => { | ||
resolveResolvers(flattenedCondition, 'reject', err); | ||
}); | ||
}, | ||
delay: delay ? { | ||
timer: null, | ||
run() { | ||
this.clear(); | ||
this.timer = setTimeout(newRunning.exec, delay); | ||
}, | ||
clear() { | ||
if (this.timer !== null) { | ||
clearTimeout(this.timer); | ||
this.timer = null; | ||
} | ||
} | ||
} : null | ||
}; | ||
@@ -139,7 +167,7 @@ runnings.push(newRunning); | ||
try { | ||
executor().then(payload => { | ||
resolveResolvers(flattenedCondition, 'resolve', payload); | ||
}).catch(err => { | ||
resolveResolvers(flattenedCondition, 'reject', err); | ||
}); | ||
if (newRunning.delay) { | ||
newRunning.delay.run(); | ||
} else { | ||
newRunning.exec(); | ||
} | ||
} catch (err) { | ||
@@ -146,0 +174,0 @@ /* istanbul ignore next */ |
/*! | ||
* async-combiner v0.0.1 | ||
* async-combiner v0.1.1 | ||
* (c) 2020 dadajam4 | ||
@@ -110,3 +110,3 @@ * Released under the MIT License. | ||
function combine(condition, executor, combineClonePayload = useClonePayload) { | ||
function combine(condition, executor, combineClonePayload = useClonePayload, delay = options.delay) { | ||
return new Promise((resolve, reject) => { | ||
@@ -121,2 +121,6 @@ const resolver = { | ||
if (sameRunning) { | ||
if (sameRunning.delay) { | ||
sameRunning.delay.run(); | ||
} | ||
sameRunning.resolvers.push(resolver); | ||
@@ -129,3 +133,27 @@ return; | ||
resolvers: [resolver], | ||
clone: combineClonePayload | ||
clone: combineClonePayload, | ||
exec: () => { | ||
newRunning.delay && newRunning.delay.clear(); | ||
executor().then(payload => { | ||
resolveResolvers(flattenedCondition, 'resolve', payload); | ||
}).catch(err => { | ||
resolveResolvers(flattenedCondition, 'reject', err); | ||
}); | ||
}, | ||
delay: delay ? { | ||
timer: null, | ||
run() { | ||
this.clear(); | ||
this.timer = setTimeout(newRunning.exec, delay); | ||
}, | ||
clear() { | ||
if (this.timer !== null) { | ||
clearTimeout(this.timer); | ||
this.timer = null; | ||
} | ||
} | ||
} : null | ||
}; | ||
@@ -135,7 +163,7 @@ runnings.push(newRunning); | ||
try { | ||
executor().then(payload => { | ||
resolveResolvers(flattenedCondition, 'resolve', payload); | ||
}).catch(err => { | ||
resolveResolvers(flattenedCondition, 'reject', err); | ||
}); | ||
if (newRunning.delay) { | ||
newRunning.delay.run(); | ||
} else { | ||
newRunning.exec(); | ||
} | ||
} catch (err) { | ||
@@ -142,0 +170,0 @@ /* istanbul ignore next */ |
/*! | ||
* async-combiner v0.0.1 | ||
* async-combiner v0.1.1 | ||
* (c) 2020 dadajam4 | ||
@@ -116,3 +116,3 @@ * Released under the MIT License. | ||
function combine(condition, executor, combineClonePayload = useClonePayload) { | ||
function combine(condition, executor, combineClonePayload = useClonePayload, delay = options.delay) { | ||
return new Promise((resolve, reject) => { | ||
@@ -127,2 +127,6 @@ const resolver = { | ||
if (sameRunning) { | ||
if (sameRunning.delay) { | ||
sameRunning.delay.run(); | ||
} | ||
sameRunning.resolvers.push(resolver); | ||
@@ -135,3 +139,27 @@ return; | ||
resolvers: [resolver], | ||
clone: combineClonePayload | ||
clone: combineClonePayload, | ||
exec: () => { | ||
newRunning.delay && newRunning.delay.clear(); | ||
executor().then(payload => { | ||
resolveResolvers(flattenedCondition, 'resolve', payload); | ||
}).catch(err => { | ||
resolveResolvers(flattenedCondition, 'reject', err); | ||
}); | ||
}, | ||
delay: delay ? { | ||
timer: null, | ||
run() { | ||
this.clear(); | ||
this.timer = setTimeout(newRunning.exec, delay); | ||
}, | ||
clear() { | ||
if (this.timer !== null) { | ||
clearTimeout(this.timer); | ||
this.timer = null; | ||
} | ||
} | ||
} : null | ||
}; | ||
@@ -141,7 +169,7 @@ runnings.push(newRunning); | ||
try { | ||
executor().then(payload => { | ||
resolveResolvers(flattenedCondition, 'resolve', payload); | ||
}).catch(err => { | ||
resolveResolvers(flattenedCondition, 'reject', err); | ||
}); | ||
if (newRunning.delay) { | ||
newRunning.delay.run(); | ||
} else { | ||
newRunning.exec(); | ||
} | ||
} catch (err) { | ||
@@ -148,0 +176,0 @@ /* istanbul ignore next */ |
@@ -1,1 +0,1 @@ | ||
!function(n,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((n=n||self).AsyncCombiner={})}(this,(function(n){"use strict";const e=["string","number","boolean","undefined"];function t(n){const t=typeof n;return!!e.includes(t)||(null===n||n instanceof Date)}function o(n,e,c){return t(n)&&(n={"_async-combiner-condition_":n}),Object.keys(n).forEach(r=>{let i,s=n[r];var u;i=void 0===c?r:c+"."+r,u=s,Array.isArray(u)||u&&"object"==typeof u&&"Object"===u.constructor.name?o(s,e,i):t(s)&&(s instanceof Date&&(s=s.toString()),e[i]=s)}),e}function c(...n){const e={};return o(n,e),e}function r(n,e){const t=Object.keys(n),o=Object.keys(e);return t.length===o.length&&t.every(t=>n[t]===e[t])}function i(n={}){const e=[],{clone:t=!0}=n;function c(n,t,o){const c=e.find(e=>r(e.condition,n));if(!c)return;const i="resolve"===t;c.resolvers.forEach(n=>{const e=c.clone&&i&&o&&"object"==typeof o?JSON.parse(JSON.stringify(o)):o;n[t](e)}),c.resolvers=[],e.splice(e.indexOf(c),1)}return{combine:function(n,i,s=t){return new Promise((t,u)=>{const f={resolve:t,reject:u},l=function(n){const e={};return o(n,e),e}(n),a=e.find(n=>r(n.condition,l));if(a)return void a.resolvers.push(f);const d={condition:l,resolvers:[f],clone:s};e.push(d);try{i().then(n=>{c(l,"resolve",n)}).catch(n=>{c(l,"reject",n)})}catch(n){c(l,"reject",n)}})},_runnings:e,_resolveResolvers:c}}n.AsyncCombiner=class{constructor(){const n=i();this.$asyncCombinerContext=n,this.$asyncCombine=n.combine}},n.Combine=function(n){const e="function"==typeof n?{createCondition:n}:n||{},{createCondition:t=c}=e;return(n,o,c)=>{let r=c.value;if(!r)throw new TypeError("missing combine function");const s=i(e);c.value=function(...n){const o=t(...n);return s.combine(o,()=>r.call(this,...n),e.clone)}}},n.createCombinerContext=i,n.createCondition=c,Object.defineProperty(n,"__esModule",{value:!0})})); | ||
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e=e||self).AsyncCombiner={})}(this,(function(e){"use strict";const n=["string","number","boolean","undefined"];function t(e){const t=typeof e;return!!n.includes(t)||(null===e||e instanceof Date)}function o(e,n,r){return t(e)&&(e={"_async-combiner-condition_":e}),Object.keys(e).forEach(c=>{let i,s=e[c];var l;i=void 0===r?c:r+"."+c,l=s,Array.isArray(l)||l&&"object"==typeof l&&"Object"===l.constructor.name?o(s,n,i):t(s)&&(s instanceof Date&&(s=s.toString()),n[i]=s)}),n}function r(...e){const n={};return o(e,n),n}function c(e,n){const t=Object.keys(e),o=Object.keys(n);return t.length===o.length&&t.every(t=>e[t]===n[t])}function i(e={}){const n=[],{clone:t=!0}=e;function r(e,t,o){const r=n.find(n=>c(n.condition,e));if(!r)return;const i="resolve"===t;r.resolvers.forEach(e=>{const n=r.clone&&i&&o&&"object"==typeof o?JSON.parse(JSON.stringify(o)):o;e[t](n)}),r.resolvers=[],n.splice(n.indexOf(r),1)}return{combine:function(i,s,l=t,u=e.delay){return new Promise((e,t)=>{const f={resolve:e,reject:t},a=function(e){const n={};return o(e,n),n}(i),d=n.find(e=>c(e.condition,a));if(d)return d.delay&&d.delay.run(),void d.resolvers.push(f);const y={condition:a,resolvers:[f],clone:l,exec:()=>{y.delay&&y.delay.clear(),s().then(e=>{r(a,"resolve",e)}).catch(e=>{r(a,"reject",e)})},delay:u?{timer:null,run(){this.clear(),this.timer=setTimeout(y.exec,u)},clear(){null!==this.timer&&(clearTimeout(this.timer),this.timer=null)}}:null};n.push(y);try{y.delay?y.delay.run():y.exec()}catch(e){r(a,"reject",e)}})},_runnings:n,_resolveResolvers:r}}e.AsyncCombiner=class{constructor(){const e=i();this.$asyncCombinerContext=e,this.$asyncCombine=e.combine}},e.Combine=function(e){const n="function"==typeof e?{createCondition:e}:e||{},{createCondition:t=r}=n;return(e,o,r)=>{let c=r.value;if(!c)throw new TypeError("missing combine function");const s=i(n);r.value=function(...e){const o=t(...e);return s.combine(o,()=>c.call(this,...e),n.clone)}}},e.createCombinerContext=i,e.createCondition=r,Object.defineProperty(e,"__esModule",{value:!0})})); |
{ | ||
"name": "@dadajam4/async-combiner", | ||
"version": "0.1.1", | ||
"version": "0.1.2", | ||
"description": "Service that combines multiple asynchronous requests into one", | ||
@@ -5,0 +5,0 @@ "main": "dist/async-combiner.common.js", |
@@ -15,2 +15,6 @@ import { AsyncCombinerFlattenedCondition } from './schemes'; | ||
clone?: boolean; | ||
/** | ||
* When delaying the start of asynchronous processing, specify the waiting time (ms). This option is useful in situations where users frequently make asynchronous operation change requests. | ||
*/ | ||
delay?: number; | ||
} | ||
@@ -22,5 +26,18 @@ /** @private */ | ||
} | ||
/** | ||
* @private | ||
*/ | ||
/** @private */ | ||
interface AsyncCombinerRunningDelaySettings { | ||
/** | ||
* Return value of setTimeout method | ||
*/ | ||
timer: number | null; | ||
/** | ||
* Waits the specified delay milliseconds before executing the request. If it is already in the delay wait state, the wait time is updated. | ||
*/ | ||
run: () => void; | ||
/** | ||
* Releases the deferred callback. | ||
*/ | ||
clear: () => void; | ||
} | ||
/** @private */ | ||
interface AsyncCombinerRunning { | ||
@@ -30,2 +47,4 @@ condition: AsyncCombinerFlattenedCondition; | ||
clone?: boolean; | ||
exec: () => void; | ||
delay: AsyncCombinerRunningDelaySettings | null; | ||
} | ||
@@ -37,3 +56,3 @@ /** | ||
export declare function createCombinerContext(options?: AsyncCombinerContextOptions): { | ||
combine: <T = any>(condition: any, executor: AsyncCombinerExecutor<T>, combineClonePayload?: boolean) => Promise<T>; | ||
combine: <T = any>(condition: any, executor: AsyncCombinerExecutor<T>, combineClonePayload?: boolean, delay?: number | undefined) => Promise<T>; | ||
/** @private */ | ||
@@ -40,0 +59,0 @@ _runnings: AsyncCombinerRunning[]; |
59149
1202