【问题标题】:Assign requestjs response to variable将 requestjs 响应分配给变量
【发布时间】:2016-04-20 22:20:33
【问题描述】:

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

例如:

文件.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);

提前致谢:)

【问题讨论】:

    标签: javascript json node.js npm requestjs


    【解决方案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 块的错误处理

    【讨论】:

    • 谢谢,我希望通过简单地获取响应主体并将其存储到变量中来避免回调并使其更清晰。哦,你应该有myvariable1=body.Name1.prop 不?
    • yes myvariable1=body.Name1.prop ...在回调完成之前,正文不可用。我认为回调没有任何简写方式可以满足您的需求。但是,promise 有一个简写形式。您可以使用 bluebird npm 模块来尝试并承诺这一点。然后你可以做... myvar = request.get('path'); .... myvar 然后将包含已解决的 Promise ON 结果的结果(不是之前) - 这肯定在 AngularJS 环境中有效,并且 prob 也可以在纯 Node 中工作 - 希望这会给人一些思考。
    • 这是一个有趣的想法,虽然我真的很想简写这个。如果您想要的只是响应,那么一旦将其分配给变量,就很容易对其进行测试。我希望这会引起更多的关注。不过谢谢:)
    • bluebird 和有前途的 request.get('someurl/file.json') 是您想要的简约代码解决方案 :)
    • 我也这么想,只是觉得很难理解 Promise。仍然一些进一步的阅读不会受到伤害。谢谢你的帮助。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-14
      • 2020-05-19
      • 2019-07-18
      • 1970-01-01
      • 2020-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多