← Cloudflare Flagship / flagship / reference
Причины оценки и коды ошибок
Когда вы вычисляете флаг с помощью метода привязки *Details методы или OpenFeature SDK, ответ включает reason поле, объясняющее, почему было возвращено то или иное значение. Если происходит ошибка, ответ включает errorCode поле.
Причины оценки
| Причина | Описание |
|---|---|
TARGETING_MATCH |
Условия правила таргетинга совпали с контекстом оценки, и был возвращён вариант этого правила. |
SPLIT |
Сработало правило таргетинга с процентным развёртыванием. Пользователь попал в указанный процент развёртывания и получил вариант этого правила. |
DEFAULT |
Ни одно правило таргетинга не соответствует контексту оценки. Возвращён вариант флага по умолчанию. |
DISABLED |
Флаг отключён. Вариант по умолчанию был возвращён независимо от правил таргетинга. |
CACHED |
SDK вернул закэшированный результат оценки. |
ERROR |
Оценка не удалась, было возвращено значение по умолчанию. |
Коды ошибок
Если при вычислении происходит ошибка, метод возвращает предоставленное вами значение по умолчанию. *Details методы включают дополнительные метаданные об ошибке.
| Код ошибки | Описание |
|---|---|
TYPE_MISMATCH |
Тип варианта флага не соответствует запрошенному типу. Например, при вызове getBooleanValue для флага, вариант которого является строкой. Возвращается значение по умолчанию. |
FLAG_NOT_FOUND |
Указанный ключ флага не существует в этом приложении. Возвращается значение по умолчанию. |
INVALID_CONTEXT |
Контекст оценки содержит неподдерживаемые значения, например объекты или массивы при оценке по HTTP. Возвращается значение по умолчанию. |
PARSE_ERROR |
SDK получил недопустимый ответ на оценку. Возвращается значение по умолчанию. |
GENERAL |
Во время оценки произошла непредвиденная ошибка, например тайм-аут или сбой сети. Возвращается значение по умолчанию. |
Пример
В следующем примере проверяются детали оценки, возвращённые getBooleanDetails:
const details = await env.FLAGS.getBooleanDetails("my-feature", false, {
userId: "user-42",
});
switch (details.reason) {
case "TARGETING_MATCH":
console.log(`Matched targeting rule, variant: ${details.variant}`);
break;
case "SPLIT":
console.log(`Included in rollout, variant: ${details.variant}`);
break;
case "DEFAULT":
console.log("No rule matched, using default variant");
break;
case "DISABLED":
console.log("Flag is disabled");
break;
}
if (details.errorCode) {
console.error(`Evaluation error: ${details.errorCode}`);
}const details = await env.FLAGS.getBooleanDetails("my-feature", false, {
userId: "user-42",
});
switch (details.reason) {
case "TARGETING_MATCH":
console.log(`Matched targeting rule, variant: ${details.variant}`);
break;
case "SPLIT":
console.log(`Included in rollout, variant: ${details.variant}`);
break;
case "DEFAULT":
console.log("No rule matched, using default variant");
break;
case "DISABLED":
console.log("Flag is disabled");
break;
}
if (details.errorCode) {
console.error(`Evaluation error: ${details.errorCode}`);
}