跳到主要内容

Endpoint 错误策略

Endpoint.errorPolicy 控制获取被拒绝(reject)时的缓存行为。它根据拒绝时的错误来判断应将其视为“软”(soft)错误还是“硬”(hard)错误。

软错误​

软错误发生时,如果存在有效数据,会继续显示这些数据。但如果 store 中没有之前的数据,则会以 error 拒绝。这种情况下,useSuspense() 会抛出该错误,由最近的 onErrorCaptured() 捕获

硬错误​

硬错误总是以 error 拒绝——即使之前已经有可用的数据。

'hard' | undefined 都可以用来表示这种状态。

<script setup lang="ts">
  import { useSuspense } from '@data-client/vue';
  import { lastUpdated } from './api/lastUpdated';

  const props = defineProps<{ id: string }>();
  const time = await useSuspense(lastUpdated, () => ({ id: props.id }));
</script>

<template>
  <div>
    API time:
    <time>{{ time.updatedAt.toLocaleString('en-US', { timeStyle: 'long' }) }}</time>
  </div>
</template>

RestEndpoint 的策略​

由于 500 表示服务器故障,如果存在过时数据,我们希望继续使用它。另一方面,像 4xx 这样的状态码表示“用户错误”,也就是说这个错误反映了应用流程上的某种情况——例如记录被删除,从而返回 404。此时继续保留该记录是不准确的。

由于这是 REST API 的典型行为,它也是 @data-client/rest 的默认策略

errorPolicy(error) {
return error.status >= 500 ? 'soft' : undefined;
}

undefined 是指定硬错误的另一种方式