通过 xhr 或者 fetch 实现网络请求 api
首先基于 DIP 的设计模式进行解藕,交给容器来处理依赖
// 通过抽象类的方式
export abstract class Requestor {
abstract get(): void
abstract post(): void
}
// 或者
interface Requestor {
get(): void
post(): void
}
export class XhrRequestor extends Requestor {
get() {
//具体实现
}
post() {
// 具体实现
}
}
// 或者
export class FetchRequestor implements Requestor {
get() {
//具体实现
}
post() {
// 具体实现
}
}
import {XhrRequestor, FetchRequestor} from './core'
@injectable()
class XXXApis {
constructor(xhrClient: XhrRequestor, fetchClient: FetchRequestor) {
// ...
}
}
通过编写脚本,根据文档来自动生成请求接口,数据类型定义等等
function multiRequest(urls: string[], maxNum: number) {
const len = urls.length
return new Promise((resolve) => {
const result = []
const container = []
function addTask(url, index) {
container.push(index)
console.log(`task${url}执行,耗时${url * 1000}s,当前时间${new Date().toLocaleTimeString()}`)
fetchData(url).then((res) => {
result[index] = res
container.splice(container.indexOf(index), 1)
if (result.length === len && container.length === 0) {
resolve(result)
} else if (container.length < maxNum && urls.length) {
addTask(urls.shift(), i++)
}
})
}
let i = 0
while (container.length < maxNum) {
const url = urls.shift()
addTask(url, i)
i ++
}
})
}