基于Ajax实现js并发请求

137 阅读1分钟

1、实现每次可以控制并发的数量

    var tasks = [
        () => { return setTimeFun(1001) },
        () => { return setTimeFun(1002) },
        () => { return setTimeFun(1003) },
        () => { return setTimeFun(1004) },
        () => { return setTimeFun(1005) },
        () => { return setTimeFun(1006) }]

    function createRequest(tasks, pool) {
        pool = pool || 5
        let results = []
        together = new Array(pool).fill(null)
        index = 0
        together.map(() => {
            return new Promise((resolve, reject) => {
                var run = function fun() {
                    if (index >= tasks.length) {
                        resolve()
                        return
                    }
                    let old_index = index
                    task = tasks[index++]()
                    task.then(function (result) {
                        results[old_index] = result
                        fun()
                    }, function (reason) {
                        reject(reason)
                    })
                }
                run()
            })
        })
        return Promise.all(together).then(() => results)
    }


    createRequest(tasks, 3).then(function (result) {
        console.log(result)
    }).catch(function () {

    })

</script>