Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从http.Get获取状态代码_Javascript_Node.js - Fatal编程技术网

Javascript 从http.Get获取状态代码

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

我正在尝试根据某些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 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);
如果您有兴趣了解整个异步逻辑执行是如何工作的,这里是一个很好的介绍