fetch取消

fetch取消

AbortController代表一个控制器对象,允许在需要时终止一个或多个DOM请求。

function ajax (url = '', options = {}) {
    const { timeout, ...opts } = options

    const ctrl = new AbortController()
    const signal = ctrl.signal
    const TIMEOUT = new Response('timeout', { status: 504, statusText: 'timeout' })

    const send = fetch(url, { ...rest, signal })

    let promises = [send]

    if (timeout) {
        promises.push(() => new Promise(resolve => {
            setTimeout(() => {
                resolve(TIMEOUT)
                ctrl.abort()
            }, timeout)
        }))
    }

    this.abort = function () {
        promises.push(() => new Promise(resolve => {
            setTimeout(() => {
                resolve(TIMEOUT)
                ctrl.abort()
            })
        }))
    }

    return new Promise((resolve) => {
        setTimeout(() => {
            resolve(Promise.race(promises))
        })
    })
}

请求并发

function request(urls, maxNumber, callback) 要求编写函数实现,根据urls数组内的url地址进行并发网络请求,最大并发数maxNumber,当所有请求完毕后调用callback函数(已知请求网络的方法可以使用fetch api)

LazyMan

链式调用、任务队列、流程控制

观察者模式

实现onemitoffonce

Last updated