JavaScript返回未按预期工作

JavaScript返回未按预期工作,javascript,json,node.js,Javascript,Json,Node.js,这是一个全新的问题,我正在尝试学习JavaScript和node.js。我试图使用请求从api中获取信息,然后将信息存储在一个数组中,然后可以对该数组进行操作 以下是我目前的代码: const request = require('request'); var url = "https://www.predictit.org/api/marketdata/ticker/CHINA.INAUGURAL.2017"; var info = request(url, function(err, res

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

以下是我目前的代码:

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
变量似乎只存储我认为与
请求
调用相关的内容,但我不确定。如果我用
console.log(json)
替换
returnjson
,那么它会立即打印数组,尽管我无法让它存储它


我想告诉node
info['ID']
,并让它返回
2835

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

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

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

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

我希望这个能起作用

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

我希望这个能起作用

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

看起来您正在从该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;
})

看起来您正在从该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;
})

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

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

我试过了,我得到了
SyntaxError:Unexpected token u
您在哪里尝试访问info变量?紧接着请求。现在,我只是把它一行一行地放进去。不,它不会那样工作的。由于所述节点是异步的,因此您的请求函数将被调用,并且节点将立即移动到下一个函数,而无需等待请求函数的响应。您必须为此使用承诺,或者访问请求回调函数中的变量。我尝试过,我得到
SyntaxError:Unexpected token u
您在哪里尝试访问info变量?紧接着请求。现在,我只是把它一行一行地放进去。不,它不会那样工作的。由于所述节点是异步的,因此您的请求函数将被调用,节点将立即移动到下一个函数,而无需等待请求函数的响应。您必须为此使用承诺,或者访问请求回调函数中的变量。感谢您的澄清,我将尝试!谢谢你的澄清,我会试试的!