我有100个网站的数组,我需要看看它们是否可用。如果它们可用,我需要检查响应体中的某些内容,我还需要检查MX记录。
我可以很容易地做到这一点,但这需要很长时间。
我不知道如何用承诺来解决这个问题。我肯定我错过了什么。谁能给我指个正确的方向?
谢谢你的帮助。
我看的所有教程都是1 url而不是100
可以在Node中通过在异步循环中执行异步函数来实现这一点。在异步函数中发出的任何HTTP请求在继续之前都不会等待响应。
当然,您仍然需要解决所有CORS访问之类的问题。
下面是一个简化的例子:
const urls = [
"https://www.typescriptlang.org/",
"https://www.w3.org/",
"https://developer.mozilla.org/",
];
async function checkWebsite(url) {
const response = await fetch(url);
const status = await response.status;
return status
}
urls.forEach(async url => {
const statusCode = await checkWebsite(url);
console.log(statusCode)
});
如果是NodeJS而不是Javascript,您可以使用Axios并将结果推入数组,如下所示:
const axios = require('axios');
const websites = [/* Array of website URL's go here */];
var statuses = [];
for (let i = 0; i < websites.length; i++) {
asynchronousProcess(function(){
var response = await axios.get(websites[i]);
var status = await response.status;
statuses.push(status)
});
}
function getstatus(url) {
let index = websites.indexOf(url);
let result = statuses[index]
return result
}
或者,如果您不想要基于承诺的方法,您可以删除异步函数调用:
const axios = require('axios');
const websites = [/* Array of website URL's go here */];
var statuses = [];
for (let i = 0; i < websites.length; i++) {
var response = axios.get(websites[i]);
var status = response.status;
statuses.push(status)
}
function getstatus(url) {
let index = websites.indexOf(url);
let result = statuses[index]
return result
}
但要注意:使用基于非承诺的方法有时可能无法工作,因为您没有等待axios.get
函数的承诺更改
请随时让我知道,如果有什么不工作,我会很高兴检查!