这是一个不同的问题,我无法为此获得解决方案,请不要将其标记为重复。
我无法在函数外部访问变量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');
答案 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的工作方式,我强烈建议你给它一个手表。