1

如何将主体分配给request.get('http://someurl/file.json', function(err, response, body) {})变量?

例如:

文件.json

{
    "Name1": {
        "prop": "value"
    },
    "Name2": {
        "prop": "value"
    }
}

应用程序.js

var json = request.get(http://localhost/file.json);
json = JSON.parse(json);

console.log(json["Name1"].prop);

提前致谢 :)

4

2 回答 2

1
var myvariable1;

request.get('http://someurl/file.json', function(err, response, body) {
    myvariable1=response.Name1.prop;
})

在回调完成之前,正文不可用。我认为回调没有任何简写方式可以满足您的需求。但是,promise 有一个简写形式。您可以使用 bluebird npm 模块来尝试并承诺这一点。然后你可以做... myvar = request.get('path'); .... myvar 然后将包含已解决的 promise ON 结果的结果(而不是之前)-这肯定在 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.

更糟糕的情况是,如果这不起作用,那么您可以求助于...

var myvar;
getMyData().then(function(data) {
  myvar = data;
));

这让你回到了你开始的地方哈哈:)

PS 为了简单起见,我忽略了使用承诺 CATCH 块的错误处理

于 2016-01-15T10:44:17.317 回答
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]);
}
于 2016-01-15T10:47:55.723 回答