取消旧搜索请求与竞态保护 | 星雨笔录
取消旧请求并防止过期结果覆盖新结果。
核心: 即时搜索可取消上次未完成的请求,并确保过期响应不会覆盖新结果。
最小示例:
let controller;
async function search(q) {
controller?.abort(); controller = new AbortController();
try { const r = await fetch(`/api/search?q=${encodeURIComponent(q)}`, { signal: controller.signal }); if (!r.ok) throw new Error(r.status); return await r.json(); }
catch (e) { if (e.name !== 'AbortError') throw e; }
}
学完能做: 取消旧请求并防止过期结果覆盖新结果。