Skip to content

wx.request 请求体和返回增加泛型 #322

@Arbureva

Description

@Arbureva

注意看代码中的 OUTIN,这样做的好处是不需要额外的使用 as 语句了

async function CustomRequest<

	OUT extends string | WechatMiniprogram.IAnyObject | ArrayBuffer =
	| string
	| WechatMiniprogram.IAnyObject
	| ArrayBuffer,

	IN extends string | WechatMiniprogram.IAnyObject | ArrayBuffer =
	| string
	| WechatMiniprogram.IAnyObject
	| ArrayBuffer

>({ data, url, method }: PostTempOptions<IN>, options?: API.IRequestOptions): Promise<OUT> {
	// 没有token就赋值,避免每次都从缓存中获取,缓存获取数据非常消耗时间

	if (!token || options?.refreshToken) {
		token = wx.getStorageSync('token');
	}

	return new Promise((resolve, reject) => {
                // NOTE: 主要看这里,OUT请求回调,IN则是附带数据
		wx.request<ResponseCallback<OUT>, IN>({
			url: PREFIX + url,
			header: { Authorization: 'Bearer ' + token },
			method: method ?? 'POST',
			data: data,
			timeout: 2000,
			success: (res) => {
				if (res.data.error_code === 401) {
					reject(new RequestError('请登录', 401))
				}

				if (!res.data.success) {
					reject(new RequestError(res.data.error_message!, res.data.error_code!))
				}

				resolve(res.data.data)
			},
			fail: (err) => {
				reject(err)
			}
		});
	})
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions