# HG changeset patch # User Lucas Thompson # Date 1494929743 -3600 # Node ID 72673c954216ff84c7d1aa46a3a8a5ee8639fa87 # Parent 38886ce7e2e5d79ab56482a8dca6bec74edda065 Try chaining the list requests. diff -r 38886ce7e2e5 -r 72673c954216 src/app/services/feature-extraction/FeatureExtractionWorker.ts --- a/src/app/services/feature-extraction/FeatureExtractionWorker.ts Tue May 16 10:44:55 2017 +0100 +++ b/src/app/services/feature-extraction/FeatureExtractionWorker.ts Tue May 16 11:15:43 2017 +0100 @@ -51,15 +51,25 @@ } list(request: ListRequest): Promise { - return Promise.all( - [...this.services.values()].map(client => client().list({})) - ).then(allAvailable => ({ - available: allAvailable.reduce( - (all, current) => all.concat(current.available), - [] - ) + //TODO refactor + const listThunks: (() => Promise)[] = [ + ...this.services.values() + ].map(client => () => client().list({})); + + const concatAvailable = (running: ListResponse, + nextResponse: Promise) + : Promise => { + return nextResponse.then(response => { + running.available = running.available.concat(response.available); + return running; + }); + }; + + return listThunks.reduce((runningResponses, nextResponse) => { + return runningResponses.then(response => { + return concatAvailable(response, nextResponse()); }) - ); + }, Promise.resolve({available: []})); } process(request: SimpleRequest): Observable { @@ -130,7 +140,7 @@ this.workerScope.onmessage = (ev: MessageEvent) => { const sendResponse = (result) => { - console.warn(ev.data.method); + console.warn(ev.data.method, ev.data); this.workerScope.postMessage({ method: ev.data.method, result: result