@opentelemetry/core
Version:
OpenTelemetry Core provides constants and utilities shared by all OpenTelemetry SDK packages.
1 lines • 1.75 kB
Source Map (JSON)
{"version":3,"file":"callback.mjs","names":[],"sources":["../../src/utils/callback.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { Deferred } from './promise';\n\n/**\n * Bind the callback and only invoke the callback once regardless how many times `BindOnceFuture.call` is invoked.\n */\nexport class BindOnceFuture<\n R,\n This = unknown,\n T extends (this: This, ...args: unknown[]) => R = () => R,\n> {\n private _isCalled = false;\n private _deferred = new Deferred<R>();\n private _callback: T;\n private _that: This;\n\n constructor(callback: T, that: This) {\n this._callback = callback;\n this._that = that;\n }\n\n get isCalled() {\n return this._isCalled;\n }\n\n get promise() {\n return this._deferred.promise;\n }\n\n call(...args: Parameters<T>): Promise<R> {\n if (!this._isCalled) {\n this._isCalled = true;\n try {\n Promise.resolve(this._callback.call(this._that, ...args)).then(\n val => this._deferred.resolve(val),\n err => this._deferred.reject(err)\n );\n } catch (err) {\n this._deferred.reject(err);\n }\n }\n return this._deferred.promise;\n }\n}\n"],"mappings":";;;;;AAUA,IAAa,iBAAb,MAIE;CACA,YAAoB;CACpB,YAAoB,IAAI,SAAY;CACpC;CACA;CAEA,YAAY,UAAa,MAAY;EACnC,KAAK,YAAY;EACjB,KAAK,QAAQ;CACf;CAEA,IAAI,WAAW;EACb,OAAO,KAAK;CACd;CAEA,IAAI,UAAU;EACZ,OAAO,KAAK,UAAU;CACxB;CAEA,KAAK,GAAG,MAAiC;EACvC,IAAI,CAAC,KAAK,WAAW;GACnB,KAAK,YAAY;GACjB,IAAI;IACF,QAAQ,QAAQ,KAAK,UAAU,KAAK,KAAK,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,MACxD,QAAO,KAAK,UAAU,QAAQ,GAAG,IACjC,QAAO,KAAK,UAAU,OAAO,GAAG,CAClC;GACF,SAAS,KAAK;IACZ,KAAK,UAAU,OAAO,GAAG;GAC3B;EACF;EACA,OAAO,KAAK,UAAU;CACxB;AACF"}