5

尝试使用 React 和 JavaScript SDK 进行Optimizely,但在控制台中收到以下错误:

OPTIMIZELY: Optimizely object is not valid. Failing isFeatureEnabled.

有关我的设置的更多信息如下:

通过纱线安装:yarn add @optimizely/react-sdk

应用容器中的导入语句:

import {
  createInstance
} from '@optimizely/react-sdk'

渲染函数中的逻辑:

const optimizely = createInstance({
  sdkKey: '<SDK_KEY>',
})

const enabled = optimizely.isFeatureEnabled('example_feature', 'user123');

我在 Chrome 控制台中收到此错误:

OPTIMIZELY: Optimizely object is not valid. Failing isFeatureEnabled.
4

1 回答 1

9

当您isFeatureEnabled在 SDK 成功加载项目的数据文件之前调用时,Optimizely 对象将记录该错误。这可能由于以下列出的多种原因而发生。查看问题中提供的代码示例,看起来原因 #4 是最可能导致错误的原因,但以下是所有原因:

1. 错误的 SDK 密钥

如果您将错误的 SDK Key 传递给createInstance,SDK 将无法成功加载数据文件,您将收到此错误。

const optimizely = createInstance({
  sdkKey: 'invalid-sdk-key'
})

2. 格式错误的数据文件

如果您将数据文件直接传递给createInstance,但传入的对象不是正确的数据文件格式,您将收到此错误:

const optimizely = createInstance({
  datafile: { wrong: 'format' }
})

3. 无法访问的数据文件

确保您可以在 Web 浏览器中访问数据文件的 url https://cdn.optimizely.com/datafiles/<Your_SDK_Key>.json:. 如果您收到AccessDenied(403) 或Not Found(404) 错误并且您的帐户是新帐户,请确保您在 Optimizely UI 中创建一些内容,以便触发 Optimizely 以创建和上传正确的数据文件。

如果在您正在运行的应用程序的控制台中看到对数据403文件404的请求,请确保没有广告拦截器、防火墙或代理阻止 SDK 从 SDK 请求 Optimizely 的 CDN 上的数据文件。

4.不等待Optimizely SDK准备好

即使您拥有正确的 SDK Key 并且 SDK 也可以访问 Optimizely 的 CDN。如果您没有给 SDK 足够的时间来完成数据文件请求,您将尝试在 SDK 准备好之前使用它。

在 JavaScript SDK 中,可以通过以下onReady方法解决:

const optimizely = createInstance({
  sdkKey: 'valid-sdk-key',
});

optimizely.onReady().then(() => {
  // optimizely is ready to use, with datafile downloaded from the Optimizely CDN
});

如果使用<OptimizelyFeature>React SDK 的组件,那么<OptimizelyFeature>组件会自动等待,直到<OptimizelyProvider>成功加载数据文件,然后再评估isFeatureEnabled.

于 2020-03-30T17:29:08.453 回答