/** * 功能:缓存一次资源保存流程中已经完成的头像上传结果。 * 版本:v1.0.0 */ export type AvatarUpload = (file: File) => Promise<{ uri: string }>; /** 创建头像上传缓存;选择新文件或清除头像时由调用方主动重置。 */ export function createAvatarUploadCache(upload: AvatarUpload) { let cachedFile: File | undefined; let cachedURI: Promise | undefined; /** 返回当前文件的受控资源地址;同一文件重试时复用首次成功结果。 */ async function resolve(file: File) { if (cachedFile !== file || !cachedURI) { cachedFile = file; cachedURI = upload(file) .then((result) => result.uri) .catch((error) => { // 上传本身失败时清空缓存,允许用户直接重试。 if (cachedFile === file) cachedURI = undefined; throw error; }); } return cachedURI; } /** 清空已上传地址,确保新选择的文件不会错误复用旧头像。 */ function reset() { cachedFile = undefined; cachedURI = undefined; } return { resolve, reset }; }