1 |
|
2 | export default (limit: number = Infinity) => {
|
3 | let releaseRequest: Function = () => {};
|
4 | let releaseResponse: Function = () => {};
|
5 |
|
6 | const request = (debug: any = undefined): Promise<*> => {
|
7 | let lastAnswer: any;
|
8 | if (limit < 1) {
|
9 | return Promise.resolve(lastAnswer);
|
10 | }
|
11 | limit--;
|
12 | setTimeout(releaseResponse);
|
13 | const returnPromise = new Promise((outerResolve: Function): Function => {
|
14 | releaseRequest = (answer: any): Promise<*> => {
|
15 | const returnPromiseB = new Promise(innerResolve => {
|
16 | let lastAnswer = answer;
|
17 | outerResolve(answer);
|
18 | releaseResponse = () => innerResolve(debug);
|
19 | return releaseResponse;
|
20 | });
|
21 | return returnPromiseB;
|
22 | };
|
23 | return releaseRequest;
|
24 | });
|
25 | return returnPromise;
|
26 | };
|
27 |
|
28 |
|
29 | const respond = (answer: any) => releaseRequest(answer);
|
30 | return [request, respond];
|
31 | };
|