/** * @file API 响应结果校验 * @author svon.me@gmail.com */ import safeGet from '@fengqiaogang/safe-get'; import _, { isObject, isString, toInteger } from 'lodash-es'; import { API } from '@/config/index'; const getResult = function (response: D): T { const data = safeGet(response as object, API.dataName); if (response && data) { if (isString(data)) { try { return JSON.parse(data); } catch (e) { // todo } } return data; } return response as any; }; // 判断状态码 export const check = function (response: D): T | boolean { const result = getResult(response); if (result && isObject(result)) { const status = safeGet(result, API.statusName); const scode = safeGet(result, API.codeName); if (status && toInteger(scode) === API.success) { const value = safeGet(result, API.dataName); return _.isNil(value) ? true : value; } // 如果状态码存在 if (/^\d+$/.test(scode) || !status) { // 向外抛出异常 throw result; } } return result; }; export const asyncCheck = async function (result: D): Promise { const data = await Promise.resolve(result); return check(data); };