我无法使用Node.JS从HTTP GET请求返回JSON。
通读示例和文档,这就是我想出的:
var http = require('http');
var options = {
host: 'some.host.com',
path: '/some/path'
};
var callback = function(response) {
var raw = '';
response.on('data', function(d) {
raw += d;
});
response.on('end', function() {
var data = JSON.parse(raw);
});
return data;
};
http.request(options, callback).end()
我也尝试过从示波器data
内部返回response.on
而没有任何运气。请注意,使用CURL可以毫无问题地获取数据。
我在做什么错,我该如何修复上面的代码来获取JSON?
您永远无法从回调中返回值。
如果在回调中获得值,则需要使用另一个回调来提取值或当场使用它:您无法返回它。问题始终是“现在我有了这些数据,我要怎么处理?” 并且“返回它”的答案是不可接受的。
例如,这应该工作:
var http = require('http');
var options = {
host: 'some.host.com',
path: '/some/path'
};
var useData = function(data) {
// do something
}
var callback = function(response) {
var raw = '';
response.on('data', function(d) {
raw += d;
});
response.on('end', function() {
var data = JSON.parse(raw);
useData(data);
});
};
http.request(options, callback).end()
(同样,这不是您的主要问题,但是您有两个名为的变量data
:一个var data
在行内局部变量,另一个在内全局变量return
。)
编辑:
我很困惑为什么我不能从回调中“返回”一个值。函数是否没有返回值/变量,或者没有求值?
他们这样做,但是为时已晚。比喻时间。
同步:
Martha告诉John接电话,然后耐心等待对话结束。然后她问他是谁,他们想要什么。约翰说,他们的邻居要一杯糖。她告诉他去给邻居喝杯糖。然后,她出去见她的朋友们。
var reply = john.answerPhone();
var action = reply.figureOutResponse();
john.tellToDo(action);
错误的异步:
玛莎叫约翰接听电话,告诉她电话是什么,然后出去见她的朋友。她一离开屋子,就试图处理约翰的回音-但约翰甚至还没有拿起接收器,更不用说告诉她任何事情了-因此她精神崩溃。如果她试图阅读便签,那它仍然是一张空白的纸(即使我们忽略了它可能仍在家里的事实),因此她还有另一种故障。如果有人还在乎,五分钟后约翰挂断电话,宣布自己的邻居需要糖到空荡荡的房子里,因为玛莎不在了。为了以防万一,他还给她写了一张纸条。没有人告诉他该怎么办,他拿起报纸开始浪费时间。该笔记永远不会被阅读。
var note;
var reply = john.answerPhone(function(reply) {
note = reply;
return reply;
};
note.figureOutResponse();
// Cannot read property 'figureOutResponse' of undefined
reply.figureOutResponse();
// Cannot read property 'figureOutResponse' of undefined
正确的异步:
玛莎(Martha)告诉约翰(John)接电话,并用信息给她回电,因为她必须外出与朋友见面。她出去了,约翰接了电话。五分钟后,约翰打电话给玛莎的手机,说是邻居在找糖。她告诉他加满一个杯子,然后送给邻居,然后挂断电话,继续她的公车旅行。
var marthasCellphone = function(data, respondCallback) {
var action = data.figureOutResponse();
respondCallback(action);
}
john.answerPhone(function(data) {
// callback here: no returns, pass data on to another callback
var action = marthasCellphone(data, function(action) {
// another callback here; use action immediately
john.tellToDo(action);
});
});
reply.figureOutResponse();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句