/* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ class BoundedQueueExportPromiseHandler { /** * @param concurrencyLimit maximum promises allowed in a queue at the same time. */ constructor(concurrencyLimit) { this._sendingPromises = []; this._concurrencyLimit = concurrencyLimit; } pushPromise(promise) { if (this.hasReachedLimit()) { throw new Error('Concurrency Limit reached'); } this._sendingPromises.push(promise); const popPromise = () => { const index = this._sendingPromises.indexOf(promise); this._sendingPromises.splice(index, 1); }; promise.then(popPromise, popPromise); } hasReachedLimit() { return this._sendingPromises.length >= this._concurrencyLimit; } async awaitAll() { await Promise.all(this._sendingPromises); } } /** * Promise queue for keeping track of export promises. Finished promises will be auto-dequeued. * Allows for awaiting all promises in the queue. */ export function createBoundedQueueExportPromiseHandler(options) { return new BoundedQueueExportPromiseHandler(options.concurrencyLimit); } //# sourceMappingURL=bounded-queue-export-promise-handler.js.map