【问题标题】:azure storage-blob isInstrumentationSuppressed is not a functionazure storage-blob isInstrumentationSuppressed 不是函数
【发布时间】:2022-10-07 04:26:24
【问题描述】:

我尝试在 BlobClient 上运行 .download(),但遇到错误: api.isInstrumentationSuppressed is not a function

我已确保我为浏览器使用了适当的方法。

我正在运行以下代码以从我的 blob 存储中获取数据。

async function readBlob(blobName) {
          const blobSvc = new ContainerClient(
            {{containerUrl}},
            new StorageSharedKeyCredential({{accountName}}, {{accountKey}})
           );
            const blobClient = blobSvc.getBlockBlobClient(blobName);

// In browsers, get downloaded data by accessing downloadBlockBlobResponse.blobBody
            const downloadBlockBlobResponse = await blobClient.download();
//The rest of the function does not run bc above line throws ERROR
            const downloaded = await blobToString(await downloadBlockBlobResponse.blobBody);
            console.log(\"Downloaded blob content\", downloaded);
            async function blobToString(blob) {
                const fileReader = new FileReader();
                return new Promise((resolve, reject) => {
                    fileReader.onloadend = (ev) => {
                        resolve(ev.target.result);
                    };
                    fileReader.onerror = reject;
                    fileReader.readAsText(blob);
                });
            }
        } catch (error) {
            throw new Error(error);
        }
    }

当我尝试在我的 nodeApp 中使用 .download() 时,它可以正常工作,使用 Node Version of the logic

通过调试,我注意到一个有趣的点是我在 Node_Modules 中的@azure 下看到:

我注意到当我将它安装在我的应用程序之外的其他地方时,它不会创建 Node_Modules 子文件夹并且它工作正常。此设置配置是否与我遇到的问题有关?我也卸载并重新安装了几次。我不确定,但它似乎不应该把我带到那个子文件夹..它应该把我带到 @azure/core-tracing that\'s 在与 @azure/storage-blob 相同的父文件夹中。

感谢您提供任何帮助!

编辑:我还尝试查看添加更多依赖项是否有助于: npm install --save @opentelemetry/api @opentelemetry/sdk-trace-web @opentelemetry/instrumentation-document-load @opentelemetry/context-zone... 还是没有运气

    标签: javascript browser sdk azure-blob-storage open-telemetry


    【解决方案1】:

    这需要一些时间来追踪,在这里分享给那些将来遇到这个问题的人。我相信在安装 azure/storage-blob SDK 时存在错误。

    当我们重新安装/更新我们的 npm 包时,这个问题就开始了。我隔离了沙箱中的逻辑以重新创建问题。隔离时效果很好。这个沙箱已经设置了包,所以我去比较了 node_modules 文件夹,工作应用程序不包括 opentelementry/tracing。

    在 /tracing 中调用了 api.isInstrumentationSuppressed 但 api 对象没有附加该方法,因此节点查找它没有成功 bc 不包括附加依赖项。

    一旦我从 /@opentelementry 中删除了整个 /tracing 文件夹,节点就知道要查看正确的文件以在 blockBlobClient 上运行 .download()。

    总之,确保您的文件夹如下所示:

    如果还有其他子文件夹,请删除它们并重新启动您的应用程序。请注意,您必须在运行更新或安装时执行此操作。

    希望 Azure 人员正在努力解决此问题according to this issue 虽然它已经关闭了一段时间。

    解决方法可能是添加一个脚本,在每次安装时删除该文件夹。但微软应该真正解决这个问题。

    【讨论】: