From bf2dc9b81b21de2c60dbf2143cdae32571d82b72 Mon Sep 17 00:00:00 2001 From: Maggie Nolan Date: Wed, 22 Nov 2017 13:29:22 -0800 Subject: [PATCH] refactor createProfile() --- ts/src/profiler.ts | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/ts/src/profiler.ts b/ts/src/profiler.ts index 4bc045867..f8164df2e 100644 --- a/ts/src/profiler.ts +++ b/ts/src/profiler.ts @@ -182,6 +182,29 @@ export class Retryer { } } +/** + * @return profile iff response indicates success and the returned profile was + * valid. + * @throws error when the response indicated failure or the returned profile + * was not valid. + */ +function responseToProfileOrError( + err: Error, body: object, response: http.ServerResponse): RequestProfile { + if (response && isErrorResponseStatusCode(response.statusCode)) { + if (isServerBackoffResponse(response)) { + throw new BackoffResponseError(response); + } + throw new Error(response.statusMessage); + } + if (err) { + throw err; + } + if (isRequestProfile(body)) { + return body; + } + throw new Error(`Profile not valid: ${JSON.stringify(body)}.`); +} + /** * Polls profiler server for instructions on behalf of a task and * collects and uploads profiles as requested @@ -333,22 +356,15 @@ export class Profiler extends common.ServiceObject { return new Promise((resolve, reject) => { this.request( options, - (err: Error, prof: object, response: http.ServerResponse) => { - if (response && isErrorResponseStatusCode(response.statusCode)) { - if (isServerBackoffResponse(response)) { - reject(new BackoffResponseError(response)); - } - reject(new Error(response.statusMessage)); - } - if (err) { - reject(err); - } - if (isRequestProfile(prof)) { + (err: Error, body: object, response: http.ServerResponse) => { + try { + const prof = responseToProfileOrError(err, body, response); this.logger.debug( `Successfully created profile ${prof.profileType}.`); resolve(prof); + } catch (err) { + reject(err); } - reject(new Error(`Profile not valid: ${JSON.stringify(prof)}.`)); }); }); }