为变量分配requestjs响应

时间:2016-01-15 10:32:30

标签: javascript json node.js npm requestjs

如何将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);

提前致谢:)

2 个答案:

答案 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]);
}