Skip to content

异步 Action、竞态与服务端状态边界:练习答案 ​

测试不需要真实网络,只要保留每次请求的 resolve:

ts
const pending: Record<string, (value: string[]) => void> = {}
const fetchResults = (keyword: string) => new Promise<string[]>((resolve) => { pending[keyword] = resolve })

const oldTask = search('old')
const newTask = search('new')
pending.new(['new-result'])
await newTask
pending.old(['old-result'])
await oldTask

console.assert(state.items[0] === 'new-result')

若使用 AbortController,catch 分支先判断 signal.aborted,将状态回到 idle 或保留上一份成功数据;只有非取消错误才进入 error。这样测试同时证明了顺序保护和用户可见状态没有把取消当故障。

答案只用于对照;请把自己的输入、输出和边界记录到项目实验日志中。

用心记录每一步成长