[英]I want to check whether URL exists or not in Synchronous way in javascript NODE.js
伙计们,我是节点 js 的新手
谢谢你们🙌🙏。
const urlExist = require("url-exist");
var httpUrl='';
for (var i=0; i<req.body.url.length; i++) {
httpUrl = req.body.url[i];
let exists1 = () => Promise.resolve(urlExist(httpUrl),httpUrl);
Promise.all([exists1()]).then((resultArr)=>{
console.log(resultArr[0],httpUrl)
})
}
输入作为来自 POSTMAN 的数组给出
{
"urls":["http://www.wrong.com/","http://wrong.com/","http://example.com","http://example.com","http:/example.com","http:/example5.com"]
}
这是我得到的输出
true http:/example5.com
false http:/example5.com
true http://example5.com
true http://example5.com
true http://example5.com
false http://example5.com
预期的输出是:-
false http://www.wrong.com/
false http://wrong.com/
true http:/example.com
true http:/example.com
true http:/example.com
true http:/example5.com
但问题是这个函数只读取“HTTP:/example5.com”并且没有给出相同的布尔值
谢谢你们
您不需要将它包装在 promise 中,然后在循环内使用一个 promise。 简单地这样做应该有效
const urlExist = require("url-exist");
const urls = ["http://www.wrong.com/","http://wrong.com/","http://example.com","http://example.com","http:/example.com","http:/example5.com"];
Promise.all(urls.map(async url => {
const result = await urlExist(url);
return {"status": result, url};
}))
.then(res => console.log(res));
您可以按照自己的方式修改输出。 目前它正在将其记录为一个数组
另外,请注意,这里使用Promise.all
对同一 url 执行多个查询是同时完成的,因此可能会产生奇怪的结果(例如,当从同一 IP 发送太多请求时,服务器可能会拒绝)。
如果你想避免它,你可以使用for ... of
循环,它将依次执行每个请求,例如:
const exists = require('url-exist')
const urls = [
'http://www.wrong.com/',
'http://wrong.com/',
'http://example.com',
'http://example.com',
'http:/example.com',
'http:/example5.com'
]
const run = async () => {
const results = []
for (const url of urls) {
try {
const result = await exists(url)
results.push({ result, url })
} catch (e) { console.error(`error with ${url} : ${e}`) }
}
return results
}
run()
.then(console.log)
.catch(console.error)
希望这可以帮助! :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.