stack-promises
Advanced tools
Comparing version 0.0.1 to 0.0.2
@@ -5,2 +5,4 @@ # Changelog | ||
### [0.0.2](https://github.com/Krivega/stack-promises/compare/v0.0.1...v0.0.2) (2020-02-28) | ||
### 0.0.1 (2020-02-25) |
@@ -1,1 +0,1 @@ | ||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const e=()=>!0;const r=new Error("Stack is empty"),s=new Error("Promise is not actual"),t=new Error("stackPromises only works with functions that returns a Promise");exports.default=()=>{const o=[],n=[],i=({task:e,index:r})=>()=>{let s=(({task:e,index:r})=>{const s=n.find(({task:s,index:t})=>e===s&&r===t);if(s)return s.promise})({task:e,index:r});return s||(s=e(),(({task:e,promise:r,index:s})=>{n.push({task:e,promise:r,index:s})})({promise:s,task:e,index:r})),s},a=()=>((r,s=e)=>r.reduce((e,r)=>e.then(({results:e,errors:t})=>{let o;return o=s(r)?r():Promise.reject({basePromise:r,id:"ERROR_CANCELED",name:"Canceled",message:"Promise was not running"}),o.then(r=>({errors:t,results:[...e,r]})).catch(r=>({results:e,errors:[...t,r]}))}),Promise.resolve({results:[],errors:[]})))(o),c=()=>0===o.length?Promise.reject(r):new Promise((e,r)=>{const t=(({resolve:e,reject:r})=>({results:t,errors:n})=>{if(t.length+n.length===o.length){const r=t[t.length-1];e(r)}else r(s)})({resolve:e,reject:r});a().then(t).catch(t)});return c.add=e=>{if("function"!=typeof e)throw t;const r=o.length;return o.push(i({task:e,index:r})),c},c},exports.isEmptyStackError=e=>e===r,exports.isPromiseIsNotActualError=e=>e===s; | ||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const e=()=>!0;const r=new Error("Stack is empty"),t=new Error("Promise is not actual"),s=new Error("stackPromises only works with functions that returns a Promise");exports.default=()=>{const n=[],o=[],i=({task:e,index:r})=>()=>{let t=(({task:e,index:r})=>{const t=o.find(({task:t,index:s})=>e===t&&r===s);if(t)return t.promise})({task:e,index:r});return t||(t=e(),(({task:e,promise:r,index:t})=>{o.push({task:e,promise:r,index:t})})({promise:t,task:e,index:r})),t},c=()=>((r,t=e)=>r.reduce((e,r)=>e.then(({results:e,errors:s})=>{let n;return n=t(r)?r():Promise.reject((e=>{const r=new Error("Promise was not running");return r.basePromise=e,r.id="ERROR_NOT_RUNNING",r.name="Not running",r})(r)),n.then(r=>({errors:s,results:[...e,r]})).catch(r=>({results:e,errors:[...s,r]}))}),Promise.resolve({results:[],errors:[]})))(n),u=()=>0===n.length?Promise.reject(r):new Promise((e,r)=>{const s=(({resolve:e,reject:r})=>({results:s,errors:o})=>{if(s.length+o.length===n.length){const r=s[s.length-1];e(r)}else r(t)})({resolve:e,reject:r});c().then(s).catch(s)});return u.add=e=>{if("function"!=typeof e)throw s;const r=n.length;return n.push(i({task:e,index:r})),u},u},exports.isEmptyStackError=e=>e===r,exports.isPromiseIsNotActualError=e=>e===t; |
@@ -7,3 +7,3 @@ { | ||
], | ||
"version": "0.0.1", | ||
"version": "0.0.2", | ||
"author": { | ||
@@ -37,11 +37,11 @@ "name": "Krivega Dmitriy", | ||
"promise-delay": "^2.1.0", | ||
"sequent-promises": "^0.0.1" | ||
"sequent-promises": "^0.0.2" | ||
}, | ||
"devDependencies": { | ||
"@babel/core": "^7.8.4", | ||
"@babel/preset-env": "^7.8.4", | ||
"@babel/core": "^7.8.6", | ||
"@babel/preset-env": "^7.8.6", | ||
"@commitlint/cli": "^8.3.5", | ||
"@commitlint/config-conventional": "^8.3.4", | ||
"@rollup/plugin-node-resolve": "^7.1.1", | ||
"babel-eslint": "10.0.3", | ||
"babel-eslint": "10.1.0", | ||
"babel-jest": "^25.1.0", | ||
@@ -58,5 +58,5 @@ "eslint": "^6.8.0", | ||
"jest": "25.1.0", | ||
"lint-staged": "^10.0.7", | ||
"lint-staged": "^10.0.8", | ||
"prettier": "^1.19.1", | ||
"rollup": "^1.31.1", | ||
"rollup": "^1.32.0", | ||
"rollup-plugin-babel": "^4.3.3", | ||
@@ -63,0 +63,0 @@ "rollup-plugin-terser": "^5.2.0", |
@@ -6,3 +6,4 @@ # stack-promises | ||
Various abstractions over promises | ||
A stack of tasks that are executed one by one, but the result is taken from the last. | ||
Identical functions on the stack (check by reference) are executed only once. | ||
@@ -25,4 +26,74 @@ ## Install | ||
## API | ||
```js | ||
import creteStackPromises from 'stack-promises'; | ||
const stackPromises = creteStackPromises(); | ||
stackPromises.add(() => Promise.resolve(1)); | ||
stackPromises.add(() => Promise.resolve(2)); | ||
stackPromises().then(data => { | ||
console.log(data); /// 2 | ||
}); | ||
``` | ||
### Execute after add | ||
```js | ||
import creteStackPromises from 'stack-promises'; | ||
const stackPromises = creteStackPromises(); | ||
stackPromises | ||
.add(() => Promise.resolve(1))() // execute | ||
.then(data => { | ||
console.log(data); // 1 | ||
}); | ||
stackPromises | ||
.add(() => Promise.resolve(2))() // execute | ||
.then(data => { | ||
console.log(data); // 2 | ||
}); | ||
stackPromises().then(data => { | ||
console.log(data); // 2 | ||
}); | ||
``` | ||
### Add after execute | ||
```js | ||
import creteStackPromises, { isPromiseIsNotActualError } from 'stack-promises'; | ||
import delayPromise from 'promise-delay'; | ||
const stackPromises = creteStackPromises(); | ||
let checkQue = 0; | ||
const request1 = () => | ||
delayPromise(3000, 1).finally(() => { | ||
checkQue += 1; | ||
}); | ||
const resultAfter1 = stackPromises.add(request1)(); | ||
const request2 = () => | ||
delayPromise(1000, 2).finally(() => { | ||
checkQue *= 2; | ||
}); | ||
const resultAfter2 = stackPromises.add(request2)(); | ||
Promise.allSettled([resultAfter1, resultAfter2]).then(([{ reason }, { value }]) => { | ||
isPromiseIsNotActualError(reason); // true | ||
value; // 2 | ||
checkQue; // 2 | ||
// request1 called 1 times | ||
// request2 called 1 times | ||
}); | ||
``` | ||
### Chaining | ||
```js | ||
stackPromises.add(() => Promise.resolve(1)).add(() => Promise.resolve(2)); | ||
``` | ||
## Run tests | ||
@@ -29,0 +100,0 @@ |
Sorry, the diff of this file is not supported yet
8636
118
+ Addedsequent-promises@0.0.2(transitive)
- Removedsequent-promises@0.0.1(transitive)
Updatedsequent-promises@^0.0.2