node.js - http请求的for循环延迟

标签 node.js loops url scraper

我刚刚开始使用 JS 和 Node.js。我正在尝试构建一个简单的爬虫作为第一个项目,使用 Node.js 和一些模块,例如 requestcheerio。 我想在数组中包含的每个域的每个 http 请求之间添加 5 秒的延迟。你能告诉我怎么做吗?

这是我的代码:

var request = require('request');

var arr = [ "http://allrecipes.com/", "http://www.gossip.fr/" ];

for(var i=0; i < arr.length; i++) {
    request(arr[i], function (error, response, body){
        console.log('error:', error);
        console.log('statusCode:', response && response.statusCode);
        console.log('body:', body);
    });
}

最佳答案

任何寻找华而不实的 ES6+ Promises 和 Async/Await 答案的人都可以使用它。

我们在这里使用 request-native-promises

const rp = require("request-promise-native");
const productID = [0,1,2,3,4,5,6]

//here we make our timeout synchronous using Promises
function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

//run your code in an async block
async function demo() {
  for (let i = 0; i < productID.length; i++) {
    const options = {
      method: "GET",
      url: `https://link_to_your_api/productID[i]`,
      json: true,
    };
    const body = await rp(options);
    console.log(`Awaiting 1s ...`);
    //waiting before sleep function executes using it synchronously
    await sleep(1000);
  }
}
demo();

//since I haven't done any error handling
process.on("unhandledRejection", err => {
  console.log("Unhandled rejection:", err.message);
});

关于node.js - http请求的for循环延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42717419/

相关文章:

node.js - node.js 中的 block 数据记录

algorithm - 如何标准化 for 循环?

java - Web 服务 API - 请求用户授权 - 第一定时器

python - 相同的 URL 请求在 python->urllib 中失败,但在curl 中则失败

node.js - 在没有服务器要求的情况下运行 CesiumJS

Node.js 集群 worker : Turn off event

c - 使用整数作为循环计数器变量是否更好?

测试可被 7 整除/倍数的 C++ 程序

php - 我可以在不启用 fopen 包装器的情况下使用 URL 作为 imagecreatefromjpeg() 的来源吗?

javascript - 在express.js应用程序中指定html文件路径的最安全方法是什么?