Skip to content

Commit e180cbf

Browse files
committed
feat: cancel old fetch requests when query changes
1 parent 472dad3 commit e180cbf

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

src/scripts/package-search.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,16 @@ export const packageSearch = defineComponent(() => ({
1313
query: "",
1414
cursor: 0,
1515
results: [] as NpmPackage[],
16+
controller: new AbortController(),
1617
init() {
1718
this.dialog = findDialog();
1819
this.resultsList = findResultsList();
1920
this.$watch("query", async () => {
20-
this.results = await searchPackages(this.query);
21+
this.controller.abort();
22+
this.controller = new AbortController();
23+
try {
24+
this.results = await searchPackages(this.query, this.controller.signal);
25+
} catch {}
2126
this.cursor = 0;
2227
});
2328
this.$watch("cursor", () => {
@@ -52,8 +57,11 @@ const findResultsList = (): HTMLUListElement | undefined => {
5257
return document.querySelector<HTMLUListElement>("#package-search-results") ?? undefined;
5358
};
5459

55-
const searchPackages = async (text: string): Promise<NpmPackage[]> => {
56-
const res = await fetch(`https://registry.npmjs.org/-/v1/search?text=${text}`);
60+
const searchPackages = async (query: string, signal: AbortSignal): Promise<NpmPackage[]> => {
61+
if (query.length < 2) {
62+
return [];
63+
}
64+
const res = await fetch(`https://registry.npmjs.org/-/v1/search?text=${query}`, { signal });
5765
const json = (await res.json()) as {
5866
objects: { package: { name: string; description?: string } }[];
5967
};

0 commit comments

Comments
 (0)