当您使用绑定的 *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}`);
}