Skip to content

📚 14.一次处理2个任务

💻 代码实现

typescript
function task(time = 1000) {
    return new Promise((resolve) => {
        setTimeout(() => {
            const timestamp = (Date.now() / 1000) | 0
            resolve(timestamp)
        }, time)
    }).then((res) => {
        console.log('res', res)
    })
}

async function concurrent(tasks, max = 10) {
    const results = []
    const poolList = new Set()
    for (let i of tasks) {
        if (poolList.size === max) {
            await Promise.race(poolList)
        }
        let task = i()
        results.push(task)
        poolList.add(task)
        task.then(() => poolList.delete(task))
    }
    return Promise.allSettled(results)
}

concurrent([task, () => task(2000), task, task, task, task, task, task, task], 2).then((res) => {
    console.log(res)
})

Released under the MIT License.