【发布时间】:2019-07-03 19:44:19
【问题描述】:
我是 node js 的新手,这就是我想要做的事情:我正在通过 map 函数(大约 3000 个链接)循环一个包含我们网站链接的 json 文件,在循环内我是为每个链接做一个 axios get 并获取响应状态码(将来会做其他事情)。但我只想每 2 秒或 5 秒运行一次 axios,否则我会压倒网络服务器。我正在尝试输入异步等待,但它仍然太快并且服务器正在受到打击(我在技术上 DDos-ing 我自己的网站)。我在 axios 周围放置了一个 SetTimeout ,但这似乎不起作用,因为在控制台中结果打印速度太快了。 所以问题是,如何让每个 axios.get 请求在 map 循环中运行前每 2 秒等待一次?
var axios = require('axios');
const fs = require('fs');
var statusCheck = 0;
var main = [];
let rawdata = fs.readFileSync('C:/Users/jay/Documents/crawl/filtered2.json');
let jsonParsed = JSON.parse(rawdata);
jsonParsed.map(async(line) => {
var encodeLink = encodeURI(line.link);
const response = await axios.get(encodeLink).catch((err) => {
var Status_ErrorsCatchaxios = {
"status Code": err.response.status ? err.response.status : "No status code available",
"Page title:": $('title').text() ? $('title').text() : 'No title avaialble',
"Original Link": encodeLink ? encodeLink : "No Original Link Available",
"errorCode": err
}
main.push(Status_ErrorsCatchaxios)
})
try {
console.log(response.status)
statusCheck = statusCheck + 1;
console.log("Link: ", statusCheck)
} catch (error) {
console.log(error)
}
})
【问题讨论】:
标签: javascript node.js asynchronous axios