| @ -1,10 +1,70 @@ | |||
| import { httpGet } from './mock-http-interface'; | |||
| // TODO define this type properly | |||
| type TResult = any; | |||
| // Keys accepted by the TResult type | |||
| type Keys = 'Arnie Quote' | 'FAILURE'; | |||
| // TResult (array of which to return) | |||
| type TResult = { | |||
| [K in Keys]?: string; | |||
| } | |||
| // Result returned by the httpGet method | |||
| type getResult = { | |||
| status: number, | |||
| body: string, | |||
| } | |||
| // The body of the getResult type, when decoded from json string | |||
| type getResultBody = { | |||
| message: string, | |||
| } | |||
| /** | |||
| * Get and parse results from the mock http server | |||
| * Note: I went a little overboard with the comments, so you know how I was thinking about this | |||
| * | |||
| * @param {string[]} url | |||
| * @return {Promise<TResult[]>} | |||
| */ | |||
| export const getArnieQuotes = async (urls : string[]) : Promise<TResult[]> => { | |||
| // TODO: Implement this function. | |||
| return []; | |||
| // Array to return | |||
| let t_results: TResult[] = []; | |||
| // All needing to resolve before returning (using Promise.all(promises)) | |||
| let promises: Promise<void>[] = []; | |||
| // Iterate through all urls | |||
| for (let url of urls) { | |||
| // Get the data from the url | |||
| let promise: Promise<void> = httpGet(url) | |||
| .then((result: getResult) => { | |||
| // Determine whether the mock api call was successful | |||
| let getResultKey: Keys = 'FAILURE'; | |||
| if (result.status === 200) { | |||
| getResultKey = 'Arnie Quote'; | |||
| } | |||
| // Decode the result_body | |||
| let result_body: getResultBody = JSON.parse(result.body); | |||
| // Push the results to the return array | |||
| t_results.push({ | |||
| [getResultKey]: result_body.message, | |||
| } as TResult); | |||
| // Resolve the promise after we are done | |||
| return Promise.resolve(); | |||
| }); | |||
| // Push the promise to the "promises" array | |||
| promises.push(promise); | |||
| } | |||
| // Wait for all promises to resolve | |||
| await Promise.all(promises); | |||
| // Return the data | |||
| return t_results; | |||
| }; | |||