comparison src/app/services/feature-extraction/FeatureExtractionWorker.ts @ 323:72673c954216

Try chaining the list requests.
author Lucas Thompson <dev@lucas.im>
date Tue, 16 May 2017 11:15:43 +0100
parents 38886ce7e2e5
children e433a2da0ada
comparison
equal deleted inserted replaced
322:38886ce7e2e5 323:72673c954216
49 addService(key: LibraryKey, service: Factory<PiperStreamingService>): void { 49 addService(key: LibraryKey, service: Factory<PiperStreamingService>): void {
50 this.services.set(key, service); 50 this.services.set(key, service);
51 } 51 }
52 52
53 list(request: ListRequest): Promise<ListResponse> { 53 list(request: ListRequest): Promise<ListResponse> {
54 return Promise.all( 54 //TODO refactor
55 [...this.services.values()].map(client => client().list({})) 55 const listThunks: (() => Promise<ListResponse>)[] = [
56 ).then(allAvailable => ({ 56 ...this.services.values()
57 available: allAvailable.reduce( 57 ].map(client => () => client().list({}));
58 (all, current) => all.concat(current.available), 58
59 [] 59 const concatAvailable = (running: ListResponse,
60 ) 60 nextResponse: Promise<ListResponse>)
61 : Promise<ListResponse> => {
62 return nextResponse.then(response => {
63 running.available = running.available.concat(response.available);
64 return running;
65 });
66 };
67
68 return listThunks.reduce((runningResponses, nextResponse) => {
69 return runningResponses.then(response => {
70 return concatAvailable(response, nextResponse());
61 }) 71 })
62 ); 72 }, Promise.resolve({available: []}));
63 } 73 }
64 74
65 process(request: SimpleRequest): Observable<StreamingResponse> { 75 process(request: SimpleRequest): Observable<StreamingResponse> {
66 return this.dispatch('process', request); 76 return this.dispatch('process', request);
67 } 77 }
128 138
129 private setupImportLibraryListener(): void { 139 private setupImportLibraryListener(): void {
130 140
131 this.workerScope.onmessage = (ev: MessageEvent) => { 141 this.workerScope.onmessage = (ev: MessageEvent) => {
132 const sendResponse = (result) => { 142 const sendResponse = (result) => {
133 console.warn(ev.data.method); 143 console.warn(ev.data.method, ev.data);
134 this.workerScope.postMessage({ 144 this.workerScope.postMessage({
135 method: ev.data.method, 145 method: ev.data.method,
136 result: result 146 result: result
137 }); 147 });
138 }; 148 };