如何将request.get('http://someurl/file.json', function(err, response, body) {})
的主体分配给变量?
例如:
file.json
{
"Name1": {
"prop": "value"
},
"Name2": {
"prop": "value"
}
}
app.js
var json = request.get(http://localhost/file.json);
json = JSON.parse(json);
console.log(json["Name1"].prop);
提前致谢:)
答案 0 :(得分:1)
var myvariable1;
request.get('http://someurl/file.json', function(err, response, body) {
myvariable1=response.Name1.prop;
})
在回调完成之前,正文无法使用。我不认为有任何缩写可以让你想要的回调。然而,有一个承诺的简写。您可以使用bluebird npm模块尝试并宣传这一点。然后你可以做... myvar = request.get(' path'); .... myvar然后将包含已解决的承诺的结果(之前没有) - 这在AngularJS环境中肯定有效,并且prob也可以在纯粹的Node中工作 - 希望能提供一些思考的食物。
你也可以使用类似q库的东西来宣传这个(我相信默认情况下它现在在Node中)。
function getMyData() {
var def=q.defer();
request.get('http://someurl/file.json', function(err, response, body) {
def.resolve(response.Name1.prop);
})
return def.promise();
}
// myvar will have the result of the resolution on resolution (not before)
var myvar = getMyData();
// to test this approach you might want to use a settimeout to repeatedly dump the value of myvar every X ms.
// Again this approach deffo works in Angular and hopefully works in Node too.
更糟糕的情况是,如果这不起作用,那么你可以去COULD度假村......
var myvar;
getMyData().then(function(data) {
myvar = data;
));
这让你有点回到你开始的地方lol:)
PS为了简单起见,我忽略了承诺CATCH块的错误处理
答案 1 :(得分:0)
javascript中没有JSON对象。你可以做的是将数据解析成一个数组,比如
var json = request.get(http://localhost/file.json);
var parsed = JSON.parse(json);
var arr = [];
for(var i in parsed){
arr.push(parsed[i]);
}