Mercurial > hg > ugly-duckling
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 }; |