import { withResolvers } from "../promise"; type Data = string | Record | ArrayBuffer; type Option = Omit, 'success' | 'fail' | 'complete'>; export type Request = PromiseLike & { abort: () => void; onProgressUpdate: (listener: WechatMiniprogram.UploadTaskOnProgressUpdateCallback) => () => void; }; export function request(option: Option) { type Result = WechatMiniprogram.RequestSuccessCallbackResult const { promise, resolve, reject } = withResolvers>(); const task = wx.request({ ...option, success: resolve, fail: reject, }); promise.abort = () => { task.abort(); task.offHeadersReceived(); task.offChunkReceived(); } return promise } type UploadOption = Omit; export function upload(option: UploadOption, fn: (data: string) => T): Request { const { promise, resolve, reject } = withResolvers>(); const task = wx.uploadFile({ ...option, success(res) { resolve(fn(res.data)); }, fail: reject, }); promise.abort = () => { task.abort(); task.offHeadersReceived(); task.offProgressUpdate(); } promise.onProgressUpdate = (listener: WechatMiniprogram.UploadTaskOnProgressUpdateCallback) => { task.onProgressUpdate(listener); return () => task.offProgressUpdate(listener); } return promise; }