From 82263fe3a15aa50e8304061c4468d30fd25604f4 Mon Sep 17 00:00:00 2001 From: Alirie Gray Date: Thu, 2 Aug 2018 13:44:35 -0700 Subject: [PATCH] Fix issue where FetchAllFluxServices did not return services on await Co-authored-by: Jared Scheib --- ui/src/shared/actions/services.ts | 32 +++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/ui/src/shared/actions/services.ts b/ui/src/shared/actions/services.ts index 4f5798be7..3fc6b8df2 100644 --- a/ui/src/shared/actions/services.ts +++ b/ui/src/shared/actions/services.ts @@ -136,17 +136,27 @@ export type FetchAllFluxServicesAsync = ( export const fetchAllFluxServicesAsync: FetchAllFluxServicesAsync = sources => async ( dispatch ): Promise => { - const allServices: Service[] = [] - sources.forEach(async source => { - try { - const services = await getServicesAJAX(source.links.services) - const fluxServices = services.filter(s => s.type === 'flux') - allServices.push(...fluxServices) - } catch (err) { - dispatch(notify(couldNotGetServices)) + const allServicesForSources: Array> = sources.map( + async source => { + try { + return getServicesAJAX(source.links.services) + } catch (err) { + dispatch(notify(couldNotGetServices)) + } } - }) - dispatch(loadServices(allServices)) + ) + + try { + const sourceServices = await Promise.all(allServicesForSources) + const flat = sourceServices.reduce((acc, cur) => { + return [...acc, ...cur.filter(s => s.type === 'flux')] + }) + dispatch(loadServices(flat)) + } catch (err) { + console.error(err.data) + dispatch(notify(couldNotGetServices)) + throw err.data + } } export type FetchFluxServicesForSourceAsync = ( @@ -160,7 +170,9 @@ export const fetchFluxServicesForSourceAsync: FetchFluxServicesForSourceAsync = const fluxServices = services.filter(s => s.type === 'flux') dispatch(loadServices(fluxServices)) } catch (err) { + console.error(err.data) dispatch(notify(couldNotGetServices)) + throw err.data } }