每5秒钟对指定的数字重复此操作,并且必须检查整个阵列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每5秒钟对指定的数字重复此操作,并且必须检查整个阵列相关的知识,希望对你有一定的参考价值。
我必须检查此安排中的所有值。整个数据分发变量称为“ subscribingUser”,我想知道在尝试每5秒执行10次操作时是否存在问题或更好的方法来创建以下逻辑。
let loopCount = 10;
let NumberOfBundle = Math.ceil(subscribingUser.length / loopCount); // 176
let restOfBundle = subscribingUser.length % loopCount; // 8
let bundleCount = 1;
let start = 0;
let bundleInterval = setInterval(async() => {
for(let i = start; i < loopCount; i++) {
//Perform 10 specific actions ...
await subscribingUser[i] ~
};
//Send all 10 and raise the BundleCount
bundleCount += 1;
start = loopCount;
if (bundleCount == NumberOfBundle && restOfBundle != 0) {
loopCount = restOfBundle - 1;
} else {
loopCount = loopCount * bundleCount;
}
if(bundleCount == NumberOfBundle + 1) {
clearInterval(bundleInterval);
}
}, 5000);
答案
- 首先,请考虑避免使用
for(...){
await ...
}
因为您将按顺序执行您的工作,这抵消了使用捆绑软件的兴趣(并行处理捆绑软件中的每个用户)
旨在]
await Promise.all(users.map(u => doSomethingWithUser(u)))
- 关于逻辑
您可以考虑将散装商品与“客户”代码分开
function bulker(arr, n) {
return {
async forEach (fn, binding) {
for(let i = 0; i < arr.length; i += n) {
await fn.call(binding, arr.slice(i, i + n), i, i +n >= arr.length)
}
}
}
}
const doSomethingWithUser = u => {
console.log('go', u);
return Promise.resolve(u)
}
;(async _=> {
//choose whenever you want to wait or not
//bulker just gives you the next slice once you "resolve"
await bulker([0, 1, 2, 3, 4], 2).forEach(async (users, i, done) => {
await Promise.all(users.map(doSomethingWithUser))
if (done) return
return new Promise((ok, ko) => setTimeout(ok, 1000))
})
console.log('done!')
})()
以上是关于每5秒钟对指定的数字重复此操作,并且必须检查整个阵列的主要内容,如果未能解决你的问题,请参考以下文章