Endpoint 错误策略
Endpoint.errorPolicy 控制获取被拒绝(reject)时的缓存行为。它根据拒绝时的错误来判断应将其视为“软”(soft)错误还是“硬”(hard)错误。
软错误
软错误发生时,如果存在有效数据,会继续显示这些数据。但如果 store 中没有之前的数据,则会以 error 拒绝。这种情况下,useSuspense() 会抛出该错误,由最近的 onErrorCaptured() 捕获
硬错误
硬错误总是以 error 拒绝——即使之前已经有可用的数据。
'hard' | undefined 都可以用来表示这种状态。
api/lastUpdated
TimePage.vue
ShowTime.vue
<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 是指定硬错误的另一种方式