如何使用nodejs异步模块?

时间:2016-06-27 16:14:08

标签: node.js

这是一个不同的问题,我无法为此获得解决方案,请不要将其标记为重复。

我无法在函数外部访问变量op。我应该使用nodjes的异步模块吗? 我有两个console.logs。但只有内部功能日志有效。

我尝试了其他问题的答案。仍然无法正常工作

var http = require('http');
console.log("hi")
var options = {
    host: 'api.usergrid.com',
    path: '/siddharth1/sandbox/restaurants'
};
var op = []; //declaring outside function
var req = http.get(options, function(res) {

    // Buffer the body entirely for processing as a whole.
    var bodyChunks = [];
    res.on('data', function(chunk) {
        // You can process streamed parts here...
        bodyChunks.push(chunk);
    }).on('end', function() {
        var body = Buffer.concat(bodyChunks);

        // ...and/or process the entire body here.
        var body2 = JSON.parse(body);

        op = body2.entities.map(function(item) {
            return item.name;
        });
        console.log(op); // only this works
    })
});

req.on('error', function(e) {
    console.log('ERROR: ' + e.message);
});


console.log("outside function " + op); //this doesnt work


console.log('Server listening on port 80');

1 个答案:

答案 0 :(得分:0)

Node.js将变量op实例化为空数组:

var op = []; //declaring outside function

然后调用http模块的.get()函数,并传递它options和回调函数。

var req = http.get(options, function(res) {
  ...
});

在您的应用程序收到HTTP GET请求之前,回调函数中的代码执行。

然后

节点继续,并执行代码的其余部分:

console.log("outside function " + op); //this doesnt work

执行上面的行,实际上,op是一个空数组,因为你将它定义为一个空数组 - 而且还没有修改过'op'。

然后服务器空闲,等待任何传入的HTTP请求。

很久以后,您当然会向服务器发出HTTP GET请求。调用您调用的回调函数,并执行该函数内的代码。

如果我是你,我会研究Node.js的一些基础教程,特别是研究它的非阻塞模型。祝你好运。

注意:Ryan Dahl's original node.js presentation是一个相当长的视频,有点旧,但完美地解释了Node.js的工作方式,我强烈建议你给它一个手表。