Объект Optimizely регистрирует эту ошибку, когда вы вызываете isFeatureEnabled
до того, как SDK успешно загрузит файл данных вашего проекта . Это может произойти по ряду причин, изложенных ниже. Глядя на пример кода, приведенный в вопросе, кажется, что причина № 4 является наиболее вероятной причиной ошибки, но вот все они:
1. Неверный ключ SDK
Если вы передадите неверный ключ SDK для createInstance
, SDK не удастся успешно загрузить файл данных, и вы получите эту ошибку.
const optimizely = createInstance({
sdkKey: 'invalid-sdk-key'
})
2. Искаженный файл данных
Если вы передаете файл данных непосредственно в createInstance
, но передаете объект, который не соответствует формату файла данных, вы получите эту ошибку:
const optimizely = createInstance({
datafile: { wrong: 'format' }
})
3. Недоступный файл данных
Убедитесь, что вы можете получить доступ к URL своего файла данных в веб-браузере: https://cdn.optimizely.com/datafiles/<Your_SDK_Key>.json
. Если вы получаете ошибку AccessDenied
(403) или Not Found
(404) и ваша учетная запись является новой, убедитесь, что вы создали что-то в пользовательском интерфейсе Optimizely, чтобы Optimizely запускался для создания и загрузки соответствующего файла данных.
Если в консоли запущенного приложения вы видите 403
или 404
для запроса к файлу данных, убедитесь, что нет блокировщиков рекламы, брандмауэров или прокси-серверов, не позволяющих SDK запрашивать файл данных в CDN Optimizely из SDK.
4. Не дожидаясь готовности Optimizely SDK
Даже если у вас есть правильный ключ SDK и SDK может получить доступ к CDN Optimizely. Если вы не дадите SDK достаточно времени для запроса файла данных до конца sh, вы будете пытаться использовать 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
.