105 lines
2.7 KiB
JavaScript
105 lines
2.7 KiB
JavaScript
import { WxQueue } from "miniprogram-queue";
|
|
/// <reference types="dom">
|
|
//@ts-ignore
|
|
const RequestMQ = new WxQueue(wx.request);
|
|
/**
|
|
* fetch 封装
|
|
* @see https://developer.mozilla.org/zh-CN/docs/Web/API/Fetch_API
|
|
* @param url 请求URL或者Request对象
|
|
* @param init 请求参数
|
|
*/
|
|
export function fetch(url, init) {
|
|
init = init || {};
|
|
const param = ((typeof url) !== 'object') ?
|
|
{
|
|
url,
|
|
data: init.body,
|
|
header: init.headers || {},
|
|
method: init.method,
|
|
dataType: 'text'
|
|
} : {
|
|
url: url.url,
|
|
data: url.json() || url.text() || url.body,
|
|
method: init.method || url.method,
|
|
header: Object.assign({}, url.headers, init.headers),
|
|
dataType: 'text',
|
|
};
|
|
return new Promise((resolve, reject) => {
|
|
param.success = function (res) {
|
|
var response = new wxHttpResponse(res);
|
|
resolve(response);
|
|
};
|
|
param.fail = reject;
|
|
param.complete = init['complete'];
|
|
RequestMQ.push(param);
|
|
});
|
|
}
|
|
class wxHttpResponse {
|
|
constructor(res) {
|
|
this.status = res.statusCode;
|
|
this.headers = res.header;
|
|
this.body = res.data;
|
|
this.ok = res.statusCode >= 200 && res.statusCode < 300;
|
|
this.bodyUsed = false;
|
|
}
|
|
/**
|
|
* Copy
|
|
*/
|
|
clone() {
|
|
return Object.assign(this);
|
|
}
|
|
arrayBuffer() {
|
|
throw new Error("Method not implemented.");
|
|
}
|
|
blob() {
|
|
throw new Error("Method not implemented.");
|
|
}
|
|
formData() {
|
|
return new Promise((resolve, reject) => {
|
|
let data = this.body;
|
|
try {
|
|
if (typeof data === "string") {
|
|
data = JSON.parse(data);
|
|
}
|
|
const formData = new FormData();
|
|
for (let key in data) {
|
|
formData.append(key, data[key]);
|
|
}
|
|
resolve(formData);
|
|
this.bodyUsed = true;
|
|
}
|
|
catch (error) {
|
|
reject(error);
|
|
}
|
|
});
|
|
}
|
|
/**
|
|
* to json as promise
|
|
*/
|
|
json() {
|
|
return new Promise((resolve, reject) => {
|
|
try {
|
|
resolve(JSON.parse(this.body));
|
|
this.bodyUsed = true;
|
|
}
|
|
catch (error) {
|
|
reject(error);
|
|
}
|
|
});
|
|
}
|
|
/**
|
|
* to string as promise
|
|
*/
|
|
text() {
|
|
return new Promise((resolve, reject) => {
|
|
try {
|
|
resolve(this.body);
|
|
this.bodyUsed = true;
|
|
}
|
|
catch (error) {
|
|
reject(error);
|
|
}
|
|
});
|
|
}
|
|
}
|