From 37ecc8055ce10b29fcd071bd7b1960e2202ae7d4 Mon Sep 17 00:00:00 2001 From: Aaron Abbott Date: Tue, 22 Dec 2020 05:24:26 +0000 Subject: [PATCH] fix(@opentelemetry/exporter-collector): remove fulfilled promises correctly --- .../src/CollectorExporterNodeBase.ts | 26 ++++++----------- .../src/CollectorExporterNodeBase.ts | 26 ++++++----------- .../browser/CollectorExporterBrowserBase.ts | 29 +++++++------------ .../node/CollectorExporterNodeBase.ts | 27 +++++++---------- .../src/zipkin.ts | 7 +++-- 5 files changed, 44 insertions(+), 71 deletions(-) diff --git a/packages/opentelemetry-exporter-collector-grpc/src/CollectorExporterNodeBase.ts b/packages/opentelemetry-exporter-collector-grpc/src/CollectorExporterNodeBase.ts index 9c7048c1889..469dab3a4d7 100644 --- a/packages/opentelemetry-exporter-collector-grpc/src/CollectorExporterNodeBase.ts +++ b/packages/opentelemetry-exporter-collector-grpc/src/CollectorExporterNodeBase.ts @@ -55,25 +55,17 @@ export abstract class CollectorExporterNodeBase< onSuccess: () => void, onError: (error: collectorTypes.CollectorExporterError) => void ): void { - const promise = new Promise(resolve => { - const _onSuccess = (): void => { - onSuccess(); - _onFinish(); - }; - const _onError = (error: collectorTypes.CollectorExporterError): void => { - onError(error); - _onFinish(); - }; - const _onFinish = () => { - resolve(); - const index = this._sendingPromises.indexOf(promise); - this._sendingPromises.splice(index, 1); - }; - - this._send(this, objects, _onSuccess, _onError); - }); + const promise = new Promise((resolve, reject) => { + this._send(this, objects, resolve, reject); + }) + .then(onSuccess) + .catch(onError); this._sendingPromises.push(promise); + promise.finally(() => { + const index = this._sendingPromises.indexOf(promise); + this._sendingPromises.splice(index, 1); + }); } onInit(config: CollectorExporterConfigNode): void { diff --git a/packages/opentelemetry-exporter-collector-proto/src/CollectorExporterNodeBase.ts b/packages/opentelemetry-exporter-collector-proto/src/CollectorExporterNodeBase.ts index 3a8bc2dfa6f..d316c928d99 100644 --- a/packages/opentelemetry-exporter-collector-proto/src/CollectorExporterNodeBase.ts +++ b/packages/opentelemetry-exporter-collector-proto/src/CollectorExporterNodeBase.ts @@ -36,25 +36,17 @@ export abstract class CollectorExporterNodeBase< onSuccess: () => void, onError: (error: collectorTypes.CollectorExporterError) => void ): void { - const promise = new Promise(resolve => { - const _onSuccess = (): void => { - onSuccess(); - _onFinish(); - }; - const _onError = (error: collectorTypes.CollectorExporterError): void => { - onError(error); - _onFinish(); - }; - const _onFinish = () => { - resolve(); - const index = this._sendingPromises.indexOf(promise); - this._sendingPromises.splice(index, 1); - }; - - this._send(this, objects, _onSuccess, _onError); - }); + const promise = new Promise((resolve, reject) => { + this._send(this, objects, resolve, reject); + }) + .then(onSuccess) + .catch(onError); this._sendingPromises.push(promise); + promise.finally(() => { + const index = this._sendingPromises.indexOf(promise); + this._sendingPromises.splice(index, 1); + }); } onInit(config: CollectorExporterNodeConfigBase): void { diff --git a/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorExporterBrowserBase.ts b/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorExporterBrowserBase.ts index 00a43641276..a1e5cfdf825 100644 --- a/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorExporterBrowserBase.ts +++ b/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorExporterBrowserBase.ts @@ -69,27 +69,20 @@ export abstract class CollectorExporterBrowserBase< const serviceRequest = this.convert(items); const body = JSON.stringify(serviceRequest); - const promise = new Promise(resolve => { - const _onSuccess = (): void => { - onSuccess(); - _onFinish(); - }; - const _onError = (error: collectorTypes.CollectorExporterError): void => { - onError(error); - _onFinish(); - }; - const _onFinish = () => { - resolve(); - const index = this._sendingPromises.indexOf(promise); - this._sendingPromises.splice(index, 1); - }; - + const promise = new Promise((resolve, reject) => { if (this._useXHR) { - sendWithXhr(body, this.url, this._headers, _onSuccess, _onError); + sendWithXhr(body, this.url, this._headers, resolve, reject); } else { - sendWithBeacon(body, this.url, _onSuccess, _onError); + sendWithBeacon(body, this.url, resolve, reject); } - }); + }) + .then(onSuccess) + .catch(onError); + this._sendingPromises.push(promise); + promise.finally(() => { + const index = this._sendingPromises.indexOf(promise); + this._sendingPromises.splice(index, 1); + }); } } diff --git a/packages/opentelemetry-exporter-collector/src/platform/node/CollectorExporterNodeBase.ts b/packages/opentelemetry-exporter-collector/src/platform/node/CollectorExporterNodeBase.ts index a57e362d0d7..d93f941c024 100644 --- a/packages/opentelemetry-exporter-collector/src/platform/node/CollectorExporterNodeBase.ts +++ b/packages/opentelemetry-exporter-collector/src/platform/node/CollectorExporterNodeBase.ts @@ -62,30 +62,23 @@ export abstract class CollectorExporterNodeBase< } const serviceRequest = this.convert(objects); - const promise = new Promise(resolve => { - const _onSuccess = (): void => { - onSuccess(); - _onFinish(); - }; - const _onError = (error: collectorTypes.CollectorExporterError): void => { - onError(error); - _onFinish(); - }; - const _onFinish = () => { - resolve(); - const index = this._sendingPromises.indexOf(promise); - this._sendingPromises.splice(index, 1); - }; + const promise = new Promise((resolve, reject) => { sendWithHttp( this, JSON.stringify(serviceRequest), 'application/json', - _onSuccess, - _onError + resolve, + reject ); - }); + }) + .then(onSuccess) + .catch(onError); this._sendingPromises.push(promise); + promise.finally(() => { + const index = this._sendingPromises.indexOf(promise); + this._sendingPromises.splice(index, 1); + }); } onShutdown(): void {} diff --git a/packages/opentelemetry-exporter-zipkin/src/zipkin.ts b/packages/opentelemetry-exporter-zipkin/src/zipkin.ts index 0f6e84ebc15..b69bc55a70a 100644 --- a/packages/opentelemetry-exporter-zipkin/src/zipkin.ts +++ b/packages/opentelemetry-exporter-zipkin/src/zipkin.ts @@ -76,11 +76,14 @@ export class ZipkinExporter implements SpanExporter { this._sendSpans(spans, this._serviceName!, result => { resolve(); resultCallback(result); - const index = this._sendingPromises.indexOf(promise); - this._sendingPromises.splice(index, 1); }); }); + this._sendingPromises.push(promise); + promise.finally(() => { + const index = this._sendingPromises.indexOf(promise); + this._sendingPromises.splice(index, 1); + }); } /**