javascript - 在同步批处理javascript中执行承诺
问题描述
我有一个 promise 函数,它从 rows 数组接收一行到远程服务器。
const post = (row) => new Promise(resolve=>
{ //do post then,
resolve(response.data);
}
所以,我想创建一个函数,它遍历数组并post
以恒定大小的批次为每个元素执行。在执行下一个批次之前,当前批次应该完全解决。我怎样才能做到这一点?
解决方案
可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);
推荐阅读
- python - DRF 序列化多个模型
- java - 我收到 ERROR TypeError: undefined is not iterable (cannot read property Symbol(Symbol.iterator)) 错误
- python - TypeError:当我不调用任何函数进行迭代时,“函数”对象不可迭代
- java - 如何向 ComboBoxTableCell 添加键盘编辑支持
- python - 如何避免打印包含“无”作为值的某些数据?
- ionic-framework - 如何在 cordova 插件中添加离子 devApp 支持
- javascript - TripleDES 加密 - c# 和 javascript 的区别
- c# - 具有特殊字符的文件夹中的 c#.WebApi 解决方案的依赖性问题
- java - 如何在 libGDX 中以相反的方式射击子弹
- c# - 是否有一个选项可以在不制作“GlobalSuppressions.cs”文件的情况下停用样式警察规则?