Javascript 从http.Get获取状态代码
我正在尝试根据某些URL的状态代码验证它们。我试着这样做:Javascript 从http.Get获取状态代码,javascript,node.js,Javascript,Node.js,我正在尝试根据某些URL的状态代码验证它们。我试着这样做: const http = require('http'); let link = 'http://source.unsplash.com/random/100x100'; const getStatusCode = (link, callback) => { http.get(link, res => { callback(res.statusCode); }) } const code
const http = require('http');
let link = 'http://source.unsplash.com/random/100x100';
const getStatusCode = (link, callback) => {
http.get(link, res => {
callback(res.statusCode);
})
}
const codeCallback = code => {
console.log('Status code inside callback: ', code); //works, displays 301
return code
}
let statusCode = getStatusCode(link, codeCallback)
console.log(statusCode) //undefined
if (statusCode) {...} //do something
有没有办法存储状态代码,或者我应该在回调中实现验证逻辑?欢迎来到回调地狱;) 您使用它的方式-是的,您需要在回调中执行验证逻辑 如果您决定进一步探索这一领域,我建议您使用JavaScript查看promises和async/await
祝你好运 您的代码是javascript中发生异步调用时出现的典型问题的一个很好的例子。具体来说,问题是您试图在变量值可用之前打印变量 为了进一步解释,所有http请求本质上都是异步的,因为在您等待服务器响应时,它们不应该阻塞您的应用程序 因此,当您调用console.log(statusCode)时,这一行在执行http.get回调之前执行,因此在执行时,statusCode是未定义的 实际上,解决方案是在回调中处理状态代码。像这样的
const http = require('http');
let link = 'http://source.unsplash.com/random/100x100';
const getStatusCode = (link, callback) => {
http.get(link, res => {
if (res.statusCode){
callback(res.statusCode);
}
})
}
const codeCallback = code => {
console.log('Status code inside callback: ', code); //works, displays 301
return code
}
getStatusCode(link, codeCallback);
如果您有兴趣了解整个异步逻辑执行是如何工作的,这里是一个很好的介绍