node.js在一定间隔内遍历数组

时间:2018-06-20 12:51:01

标签: arrays node.js loops httprequest settimeout

我已经使用了很短的时间来处理node.js,目前存在以下问题:我想遍历数组并为数组中的每个元素发送一个http请求。这些请求应每5秒执行一次。除此之外,这应该最大程度地完成。 10次​​。

这意味着应该每5秒发送一次针对数组中所有元素的http请求。

我已经为每个循环尝试了一个分支异步,但是没有得到想要的结果。

我知道我的代码存在问题,但是找不到其他解决方案。

它看起来像这样:

// Set for loop
for (var i = 0; i <= 10; i++) {
   setTimeout(function () {
   // Iterate through every element within the array
   sendItems.forEach(function (arrayItem) {
   // Some code
   request (.....)

   // Exit condition
   if (sendItems[sendItems.length - 1].status === 'Failed'|||
      sendItems[sendItems.length - 1].status ==='Successful') {
        if (cbFlag === false) {
           interval = 0;
            resolve(sendItems);
          }
     }
   });
}interval * i);

1 个答案:

答案 0 :(得分:1)

假设request是指nodejs模块。这是一个使用诸如sleep之类的奇怪方法的可能解决方案:)

const request = require('request');
const _request = require('util').promisify(request);
let sendItems = [1,2,3];

let sleep = (ms) => {
        return new Promise(function (resolve, reject) {
            setTimeout(function () {
                console.log(`waiting ${ms/1000} sec..`)
                resolve();
            }, ms);
        })
}   
(async function loop() {
    for (let i = 0; i < 10; i++) {

        for (let id of sendItems) {
            let r = await  _request('https://jsonplaceholder.typicode.com/posts/'+id, { json: true })
            console.log(r.body.id);
        }
        await sleep(5000);
    } console.log("ok that's it")
})();