Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.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 - Fatal编程技术网

Javascript 理解node.js回调

Javascript 理解node.js回调,javascript,node.js,Javascript,Node.js,我使用urllib向网页发出请求,并尝试返回其标题,如下所示: var getHeaders = function(webpage){ var info = urllib.request(webpage, {}, function(err, data, res){ // console.log(res.headers); works fine and shows them return res.headers; // I thought it should

我使用urllib向网页发出请求,并尝试返回其标题,如下所示:

var getHeaders = function(webpage){
    var info = urllib.request(webpage, {}, function(err, data, res){
        // console.log(res.headers); works fine and shows them
        return res.headers; // I thought it should make the info variable have the headers information
    }); 
    return info; 
}

现在,当我尝试获取网页的标题时,例如,可能
set cookie
,我希望它从网站返回标题,但是它没有,那么有没有方法返回标题,或者是不可能这样做呢?

在节点中,几乎所有事情都是异步完成的,所以您只需要将函数设置为异步

var getHeaders = function (webpage, done) {
    urllib.request(webpage, {}, function(err, data, res){
        done(err, res.headers);
    });  
}
传统的模式是使用返回错误的回调作为第一个参数(或者在一切顺利的情况下使用错误值),以及之后需要返回的任何内容

然后,使用该方法与使用
urllib
方法非常相似

getHeaders(webpage, function (err, headers) {
    if (err) {
        throw err; // or, you know, deal with it.
    }
    console.log(headers);
});

在节点中,几乎所有操作都是异步完成的,所以您只需要将函数设置为异步

var getHeaders = function (webpage, done) {
    urllib.request(webpage, {}, function(err, data, res){
        done(err, res.headers);
    });  
}
传统的模式是使用返回错误的回调作为第一个参数(或者在一切顺利的情况下使用错误值),以及之后需要返回的任何内容

然后,使用该方法与使用
urllib
方法非常相似

getHeaders(webpage, function (err, headers) {
    if (err) {
        throw err; // or, you know, deal with it.
    }
    console.log(headers);
});

这是不可能做到的。它是异步的,所以你也需要使你的工作流程异步…任何事情都是可能的,只要添加一个while循环来阻止服务器,直到异步调用完成为止。@adeneo你有一颗黑心,你有。@Pointy-有时,我没有把它作为答案发布,或者说这是一个好主意,但我看到过人们实际使用while循环的代码,因为他们不知道如何使用异步方法。这是不可能的。它是异步的,所以你需要使你的工作流也异步…任何事情都是可能的,只需添加一个while循环来阻止服务器,直到异步调用完成。@adeneo你有一个黑心,你有。@Pointy-有时,我没有把它作为一个答案发布,或者说这是一个好主意,但我看到一些代码,人们实际上使用while循环,因为他们不知道如何使用异步方法。哦,我明白了,但是在一个函数中可以做到吗?我只是好奇我应该如何在node中做事情,因为我对依赖于异步代码的同步代码不熟悉。只能在不依赖异步代码的函数中返回值。在异步世界中,使用回调返回未定义,我认为这是他们的任何方式,我可以分配res.headers到一个可返回的值?哦,我明白了,但这可能在一个函数中完成吗?我只是好奇我应该如何在node中做事情,因为我对依赖于异步代码的同步代码不熟悉。只能在不依赖异步代码的函数中返回值。在异步世界中,使用回调我认为返回未定义的是哪一个?我可以用什么方法将res.headers分配给一个可返回的值?