我目前正在尝试模拟 50 万个 IoT 设备,以使用 Nodejs 将有效负载推送到 Azure IoT 中心。由于节点本质上是多线程的,因此它的物联网中心充满了数据,并且我收到了网络错误。
我还尝试了异步/等待方法,但这需要花费大量时间将数据推送到 IoT 中心。
有没有办法只并行运行 100 个调用,等待所有调用完成,然后在节点中运行下一个 100 个调用?
非常感激!
将批次构建为嵌套数组Promise
s,然后使用Promise.all https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all循环中的每个批次await https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_functions 为每个Promise.all
解决。
// This is a mock request function, could be a `request` call
// or a database query; whatever it is, it MUST return a Promise.
const sendRequest = () => {
return new Promise((resolve) => {
setTimeout(() => {
console.log('request sent')
resolve()
}, 1000)
})
}
// 5 batches * 2 requests = 10 requests.
const batches = Array(5).fill(Array(2).fill(sendRequest))
;(async function() {
for (const batch of batches) {
try {
console.log('-- sending batch --')
await Promise.all(batch.map(f => f()))
} catch(err) {
console.error(err)
}
}
})()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)