将 requestjs 响应分配给变量

Assign requestjs response to variable

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

提前致谢:)

var myvariable1;

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

在回调完成之前,正文不可用。我不认为有任何 shorthand 允许你想要的回调。但是,有一个 shorthand 用于承诺。您可以使用 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 为了简单起见,我忽略了使用 promise CATCH 块的错误处理

javascript 中没有 JSON-object。你可以做的是将数据解析成一个数组,像这样

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

for(var i in parsed){
    arr.push(parsed[i]);
}