Skip to content

Commit c0e2b64

Browse files
committed
feat: add noRejectIsNotActual to params
1 parent 50ef174 commit c0e2b64

File tree

2 files changed

+51
-9
lines changed

2 files changed

+51
-9
lines changed

src/__tests__/index.ts

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,8 @@ describe('creteStackPromises', () => {
158158
});
159159
});
160160

161-
const resultAfter1 = stackPromises.add(request1)();
162-
const resultAfter2 = stackPromises.add(request2)();
161+
const resultAfter1 = stackPromises.run(request1);
162+
const resultAfter2 = stackPromises.run(request2);
163163

164164
return Promise.allSettled([resultAfter1, resultAfter2]).then((args) => {
165165
// @ts-ignore
@@ -173,6 +173,35 @@ describe('creteStackPromises', () => {
173173
});
174174
});
175175

176+
it('2 promise: async: noRejectIsNotActual', () => {
177+
expect.assertions(5);
178+
179+
let checkQue = 0;
180+
const request1 = jest.fn(() => {
181+
return delayPromise(3, 1).finally(() => {
182+
checkQue += 1;
183+
});
184+
});
185+
const request2 = jest.fn(() => {
186+
return delayPromise(1, 2).finally(() => {
187+
checkQue *= 2;
188+
});
189+
});
190+
191+
stackPromises = creteStackPromises<number>({ noRejectIsNotActual: true });
192+
193+
const resultAfter1 = stackPromises.run(request1);
194+
const resultAfter2 = stackPromises.run(request2);
195+
196+
return Promise.all([resultAfter1, resultAfter2]).then(([value1, value2]) => {
197+
expect(value1).toBe(1);
198+
expect(value2).toBe(2);
199+
expect(checkQue).toBe(2);
200+
expect(request1).toHaveBeenCalledTimes(1);
201+
expect(request2).toHaveBeenCalledTimes(1);
202+
});
203+
});
204+
176205
it('1 promise rejected', () => {
177206
expect.assertions(1);
178207

src/index.ts

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@ const notFunctionError = new Error(
1212
'stackPromises only works with functions that returns a Promise'
1313
);
1414

15-
const creteStackPromises = <T = any>() => {
15+
const creteStackPromises = <T = any>({
16+
noRejectIsNotActual = false,
17+
}: {
18+
noRejectIsNotActual?: boolean;
19+
} = {}) => {
1620
type TPromise = Promise<T>;
1721
type TTask = () => TPromise;
1822
type TRunner = () => TPromise;
@@ -70,18 +74,27 @@ const creteStackPromises = <T = any>() => {
7074
return ({ results, isSuccessful }: { results: T[]; isSuccessful: boolean }) => {
7175
const sizePromises = results.length;
7276
const sizeStackPromises = runnersStack.length;
77+
const isActual = sizePromises === sizeStackPromises;
7378

74-
if (sizePromises === sizeStackPromises) {
79+
if (isActual) {
7580
const lastResult = results[results.length - 1];
7681

7782
if (isSuccessful) {
78-
resolve(lastResult);
79-
} else {
80-
reject(lastResult);
83+
return resolve(lastResult);
8184
}
82-
} else {
83-
reject(promiseIsNotActualError);
85+
86+
return reject(lastResult);
8487
}
88+
89+
if (noRejectIsNotActual) {
90+
const lastResult = results[results.length - 1];
91+
92+
return resolve(lastResult);
93+
}
94+
95+
reject(promiseIsNotActualError);
96+
97+
return undefined;
8598
};
8699
};
87100

0 commit comments

Comments
 (0)