diff --git a/webui/src/api/search.ts b/webui/src/api/search.ts index 9837c222..a3828534 100644 --- a/webui/src/api/search.ts +++ b/webui/src/api/search.ts @@ -27,6 +27,8 @@ export const apiSearch = { eventSource.onerror = ev => { console.error('[/search/bangumi] Server Error |', { keyword }, 'error:', ev) + // 目前后端搜索完成关闭连接时会触发 error 事件,前端手动调用 close 不再自动重连 + eventSource.close(); }; return () => { diff --git a/webui/src/store/search.ts b/webui/src/store/search.ts index 1551bd2d..e809ab3e 100644 --- a/webui/src/store/search.ts +++ b/webui/src/store/search.ts @@ -1,8 +1,8 @@ import {ref} from 'vue'; import { + EMPTY, Subject, debounceTime, - filter, switchMap, tap, } from "rxjs"; @@ -39,18 +39,18 @@ export function useSearchStore() { const bangumiInfo$ = input$.pipe( debounceTime(600), - tap(() => { + // switchMap 把输入 keyword 查询为 bangumiInfo$ 流,多次输入自动取消并停止前一次查询 + switchMap((input: string) => { // 有输入更新后清理之前的搜索结果 bangumiList.value = []; + return input + ? apiSearch.get(input, provider.value) + : EMPTY }), - filter(Boolean), - // switchMap 把输入 keyword 查询为 bangumiInfo$ 流,多次输入自动取消并停止前一次查询 - switchMap((input: string) => apiSearch.get(input, provider.value)), tap((bangumi: BangumiRule) => { bangumiList.value.push(bangumi); }), - ) - .subscribe() + ).subscribe() function onSearch() { input$.next(inputValue.value);