JavaScript返回不按预期工作

时间:2016-12-24 06:24:23

标签: javascript json node.js

这是一个全新的问题,我正在尝试学习JavaScript和node.js.我正在尝试使用请求从api中获取信息,然后将信息存储在我可以操作的数组中。

到目前为止,这是我的代码:

max_execution_time = 90

但是,const request = require('request'); var url = "https://www.predictit.org/api/marketdata/ticker/CHINA.INAUGURAL.2017"; var info = request(url, function(err, res, body){ var json = JSON.parse(body); return json; }) 变量似乎只存储了我认为与info调用相关的内容,但我不确定。如果我用request替换return json,那么它会立即打印出数组,但我无法将其存储起来。

我想告诉节点console.log(json)并让它返回info['ID']

4 个答案:

答案 0 :(得分:1)

节点不能像这样工作。节点是异步的。 你可以试试这个,

 var info;
    request(url, function(err, res, body){
        info = JSON.parse(body);
    });

答案 1 :(得分:1)

看起来像你'从该URL请求xml文件。您可以通过键入npm install xml2js为nodejs安装xml2js库,并让它为您解析xml。之后

var parseString = require('xml2js').parseString;

var url = "https://www.predictit.org/api/marketdata/tick /CHINA.INAUGURAL.2017";
var info = request(url, function(err, res, body){
   parseString(body, function (err, result) {
       info = JSON.parse(JSON.stringify(result));
   });
   return info;
})

答案 2 :(得分:0)

我希望这个应该有效,

request('https://www.predictit.org/api/marketdata/ticker/CHINA.INAUGURAL.2017', 
function (err, res) {
        if (err) {
            console.log('ERROR: Something went wrong');
        }
        else {
            parseString(responce.body, function (err, result) {                    
               res.json(result);
            });
        }
    });

答案 3 :(得分:0)

我认为数据存储在' info'变量,但您在存储数据之前使用它。 这里API调用需要一些时间来处理和获取数据。然后它将被存储到' info'变量。超时5秒然后尝试console.log(info [1])并返回预期值。 这是由于nodejs的异步性质。在这里,您的代码可能在API调用设置之前执行info [1]。