UNPKG

1.21 kBJavaScriptView Raw
1//@flow
2export default (limit: number = Infinity) => {
3 let releaseRequest: Function = () => {};
4 let releaseResponse: Function = () => {};
5 //Calling request will return a new promise that's primed to resolve with the arguments of respond when next called
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 //Calling respond will resolve the promise most recently created by calling request.
28 //It returns a promise that will be resolved after the next call to request creates a new promise.
29 const respond = (answer: any) => releaseRequest(answer);
30 return [request, respond];
31};