maotoumao/MusicFree · warning · Error
搜索结果为空
Error message
搜索结果为空
What it means
useSearch throws Error('搜索结果为空') ("search result is empty") when the search hook receives a falsy result back from the plugin search call. It guards the state update so empty/failed plugin responses never overwrite existing results. The page status is set to RESULT only when not in EDITING mode.
Source
Thrown at src/pages/searchPage/hooks/useSearch.ts:124
);
// !! jscore的promise有问题,改成hermes就好了,可能和JIT有关,不知道。
const result = await plugin?.methods?.search?.(
query,
page,
searchType,
);
/** 如果搜索结果不是本次结果 */
if (currentQueryRef.current !== query) {
return;
}
/** 切换到结果页 */
const currentPageStatus =
getDefaultStore().get(pageStatusAtom);
if (currentPageStatus !== PageStatus.EDITING) {
setPageStatus(PageStatus.RESULT);
}
if (!result) {
throw new Error("搜索结果为空");
}
setSearchResults(
produce(draft => {
const prevMediaResult = draft[searchType];
const prevPluginResult: any = prevMediaResult[
_hash
] ?? {
data: [],
};
const currResult = result.data ?? [];
prevMediaResult[_hash] = {
state:
result?.isEnd === false &&
result?.data?.length
? RequestStateCode.PARTLY_DONE
: RequestStateCode.FINISHED,
query,View on GitHub (pinned to d118b18b3d)
Solutions
- Check network connectivity and retry the search.
- Update the search plugin for the selected platform so its search returns a valid result object.
- In the plugin, return an empty result structure ({data: [], ...}) instead of null/undefined for zero-hit searches.
- Wrap the search call so a null result is shown as 'no results' UI rather than propagating an exception.
Example fix
// before
const result = await plugin.methods.search(keyword, page, type);
// after
const result = (await plugin.methods.search(keyword, page, type)) ?? { isEnd: true, data: [] }; Defensive patterns
Strategy: try-catch
Validate before calling
if (!keyword?.trim()) return; // don't even call search
const plugin = pluginManagerService.getBySearchType(searchType);
if (!plugin?.methods?.search) { setNoResults(); return; } Type guard
function isSearchResult(r: unknown): boolean {
return !!r && typeof r === 'object' && Array.isArray((r as any).data);
} Try / catch
try {
await search(keyword);
} catch (e) {
if (e?.message === '搜索结果为空') {
setPageStatus(PageStatus.RESULT); // show empty state, keep old data
} else {
Toast.warn(e?.message ?? String(e));
}
} Prevention
- Treat a falsy plugin search response as 'no results', not an exception, at the plugin level.
- Update search plugins when a platform's API changes.
- Check connectivity before searching and show a distinct offline state.
- Guard the search call when the page is in EDITING mode.
When it happens
Trigger: Invoking the search function of useSearch where the plugin's search() resolves to undefined/null/empty — e.g. plugin returns no data, keyword yields zero results with no result envelope, or the plugin throws and is caught upstream returning nothing.
Common situations: Searching with a plugin whose remote API changed or is down; entering keywords that match nothing and the plugin returns null instead of an empty list; stale plugin after a music-site redesign; searching while offline.
Related errors
- panel.importMusicSheet.invalidLink
- mediakey不完整
- 无法识别此插件
- panel.searchLrc.toast.failToSearch
- toast.failToImportMusic
AI-assisted analysis of maotoumao/MusicFree@d118b18b3d (2026-08-30).
Data as JSON: /api/errors/c7d7ad740e1fa49b.
Report an issue: GitHub.