在同步批处理中执行Promise JavaScript

时间:2020-04-26 14:29:12

标签: javascript promise async-await

我有一个promise函数,该函数接收来自rows数组到远程服务器的一行。

const post = (row) => new Promise(resolve=>
    {    //do post then,
         resolve(response.data);
    }

因此,我想创建一个遍历数组的函数,并以恒定大小的批次为每个元素执行post。在执行下一个批次之前,应彻底解决当前批次。我该如何实现?

1 个答案:

答案 0 :(得分:-1)

可以使用Promise.all进行批处理,使用await进行解析:

const post = (row) => new Promise(resolve => {
    setTimeout(
        () => resolve(row.id), //for demo purpose
        1000);
})

const rows = [{
    id: 1
}, {
    id: 2
}, {
    id: 3
}, {
    id: 4
}, {
    id: 5
}, {
    id: 6
}, {
    id: 7
}];

const execute = async (batchSize) => {
    let currentPtr = 0;
    while (currentPtr < rows.length) {
        const results = await Promise.all(
            rows.slice(currentPtr, currentPtr + batchSize)
            .map(row => post(row))
        )
        console.log(results);
        currentPtr += batchSize;
    }
}

execute(2);