Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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 如何从Node.js中的函数返回状态码_Javascript_Node.js_Http Status Codes - Fatal编程技术网

Javascript 如何从Node.js中的函数返回状态码

Javascript 如何从Node.js中的函数返回状态码,javascript,node.js,http-status-codes,Javascript,Node.js,Http Status Codes,我有这样的功能: function getStatusCode(site){ var options = { host: "127.0.0.1", port: 8000, path: site, headers: { Host: site } }; var status; http.get(options, function(

我有这样的功能:

function getStatusCode(site){
    var options = {
        host: "127.0.0.1",
        port: 8000,
        path: site,
        headers: {
                    Host: site
            }
        };

    var status;

    http.get(options, function(response) {
        status=response.statusCode;
    });
    return status;
} 

如何仅在http.get finish work时返回状态,或在超时时返回null(例如10秒)?

node.js背后的整个思想是它的异步性质。您试图做的是通过尝试使其同步来违反设计模式,而设计模式正是其根源所在

由于
get
方法的异步性质,您无法执行此操作。只能在回调函数内操作状态代码。因此,您的
getStatusCode
不需要返回任何内容。您可以使其接受一个附加参数,该参数将表示在结果可用时调用的回调:

function getStatusCode(site, callback) {
    var options = {
        host: "127.0.0.1",
        port: 8000,
        path: site,
        headers: {
            Host: site
        }
    };

    http.get(options, function(response) {
        callback(response.statusCode);
    });
}
然后:

getStatusCode('http://...', function(statusCode) {
    alert(statusCode);
});

node.js背后的全部思想是它的异步性质。您试图做的是通过尝试使其同步来违反设计模式,而设计模式正是其根源所在

由于
get
方法的异步性质,您无法执行此操作。只能在回调函数内操作状态代码。因此,您的
getStatusCode
不需要返回任何内容。您可以使其接受一个附加参数,该参数将表示在结果可用时调用的回调:

function getStatusCode(site, callback) {
    var options = {
        host: "127.0.0.1",
        port: 8000,
        path: site,
        headers: {
            Host: site
        }
    };

    http.get(options, function(response) {
        callback(response.statusCode);
    });
}
然后:

getStatusCode('http://...', function(statusCode) {
    alert(statusCode);
});
您不能“返回”它本身,因为这需要i/o上的功能块,这是一个节点号。相反,您可以向它传递一个回调函数,该函数将用您的状态代码调用

function getStatusCode(site, callback){
    var options = {
        host: "127.0.0.1",
        port: 8000,
        path: site,
        headers: {
            Host: site
            }
        };

    var status;

    http.get(options, function(response) {
        status=response.statusCode;
        callback(status);
    });
} 
您不能“返回”它本身,因为这需要i/o上的功能块,这是一个节点号。相反,您可以向它传递一个回调函数,该函数将用您的状态代码调用

function getStatusCode(site, callback){
    var options = {
        host: "127.0.0.1",
        port: 8000,
        path: site,
        headers: {
            Host: site
            }
        };

    var status;

    http.get(options, function(response) {
        status=response.statusCode;
        callback(status);
    });
} 

所提出的方法不能很好地扩展,尤其是当您需要错误处理时:在复杂的情况下,您将得到大量的lambdas。所以上面的例子应该像入门教程一样对待,不应该在生产中使用

可以使用
return
异步返回值,但不应返回值,而应返回某种类型的延续。未来和承诺就是这种延续的一个例子。寻找提供它们的NPM库。有关示例,请参见
q
q-http

另见以下相关问题:

我认为
q
库之所以与众不同,是因为它有姐妹库(
q-io
q-http
),使用promises实现了大多数标准node.js库


事实上,早期的节点标准库使用承诺,但后来他们决定使用回调。这并不是因为承诺不好,而是因为回调级别较低。

建议的方法不能很好地扩展,特别是当您需要错误处理时:在复杂的情况下,您会得到大量的lambdas。所以上面的例子应该像入门教程一样对待,不应该在生产中使用

可以使用
return
异步返回值,但不应返回值,而应返回某种类型的延续。未来和承诺就是这种延续的一个例子。寻找提供它们的NPM库。有关示例,请参见
q
q-http

另见以下相关问题:

我认为
q
库之所以与众不同,是因为它有姐妹库(
q-io
q-http
),使用promises实现了大多数标准node.js库


事实上,早期的节点标准库使用承诺,但后来他们决定使用回调。这并不是因为承诺不好,而是因为回访级别较低。

我会重新思考您试图做什么。看起来你想要一个同步的
getStatusCode
函数,但这不是通常的做法。我会重新考虑你想做什么。看起来您需要一个同步
getStatusCode
函数,但这不是通常的做法。您忘记添加错误处理<代码>http.get(选项,函数(res){//callback}).on('error',函数(e){//error handling})您忘记添加错误处理<代码>http.get(选项,函数(res){//callback}).on('error',函数(e){//error handling})