diff --git a/packages/core/storage-js/src/packages/BlobDownloadBuilder.ts b/packages/core/storage-js/src/packages/BlobDownloadBuilder.ts index 05ea77790..6f953336f 100644 --- a/packages/core/storage-js/src/packages/BlobDownloadBuilder.ts +++ b/packages/core/storage-js/src/packages/BlobDownloadBuilder.ts @@ -2,7 +2,10 @@ import { isStorageError } from '../lib/errors' import { DownloadResult } from '../lib/types' import StreamDownloadBuilder from './StreamDownloadBuilder' -export default class BlobDownloadBuilder implements PromiseLike> { +export default class BlobDownloadBuilder implements Promise> { + readonly [Symbol.toStringTag]: string = 'BlobDownloadBuilder' + private promise: Promise> | null = null + constructor( private downloadFn: () => Promise, private shouldThrowOnError: boolean @@ -16,7 +19,24 @@ export default class BlobDownloadBuilder implements PromiseLike) => TResult1 | PromiseLike) | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | null ): Promise { - return this.execute().then(onfulfilled, onrejected) + return this.getPromise().then(onfulfilled, onrejected) + } + + catch( + onrejected?: ((reason: any) => TResult | PromiseLike) | null + ): Promise | TResult> { + return this.getPromise().catch(onrejected) + } + + finally(onfinally?: (() => void) | null): Promise> { + return this.getPromise().finally(onfinally) + } + + private getPromise(): Promise> { + if (!this.promise) { + this.promise = this.execute() + } + return this.promise } private async execute(): Promise> {