nf-disk/frontend/src/api.tsx
loveuer 1c818daf16 🎉 开始项目
feat: 完成基础界面; 列表展示
todo: uplevel button function
todo: download/upload
2024-10-11 22:24:14 +08:00

51 lines
1.4 KiB
TypeScript

import {Invoke} from "../wailsjs/go/controller/App";
export interface Resp<T> {
status: number;
msg: string;
err: string;
data: T;
}
// 类型保护函数
function isResp<T>(obj: any): obj is Resp<T> {
return (
typeof obj === 'object' &&
obj !== null &&
typeof obj.status === 'number' &&
(typeof obj.msg === 'string' || typeof obj.msg === null) &&
(typeof obj.err === 'string' || typeof obj.err === null)
);
}
export async function Dial<T=any>(path: string, req: any = null): Promise<Resp<T>> {
const bs = JSON.stringify(req)
console.log(`[DEBUG] invoke req: path = ${path}, req =`, req)
let result: Resp<T>;
let ok = false;
try {
const res = await Invoke(path, bs)
const parsed = JSON.parse(res);
if (isResp<T>(parsed)) {
result = parsed;
ok = true
} else {
console.error('[ERROR] invoke: resp not valid =', res)
result = {status: 500, msg: "发生错误(0)", err: res} as Resp<T>;
}
} catch (error) {
result = {status: 500, msg: "发生错误(-1)", err: "backend method(Invoke) not found in window"} as Resp<T>;
}
if (ok) {
console.log(`[DEBUG] invoke res: path = ${path}, res =`, result)
} else {
console.error(`[ERROR] invoke res: path = ${path}, res =`, result)
}
return result
}