Javascript值未定义,函数在赋值后运行

时间:2016-04-16 14:29:19

标签: javascript node.js

如何加载我的变量" vSave"有数据。这是Javascript让我困惑的地方。看起来我写这个vSave的方式在返回时是未定义的,但我知道response.on(' end')运行并且有我正在寻找的数据。我只是不知道如何将它返回到我的路由器,所以我可以在我的客户端使用它。

var express = require('express');
var router = express.Router();
var parseString = require('xml2js').parseString;
var config = require('../config_bartapi');
var http = require('http');
var vTemp; // [DEBUG]
var vSave; // [DEBUG]
// Real Time Departure from a given station
router.route('/departTimeStation')
    .get(function(req, res) {
        var vParsed = '';
        vCmd = 'etd';
        vOrig = req.query.vOriginStation;
        vDir = 'n'; // [NOTE] - 'n' or 's', north or south, OPTIONAL
        vPlat = 1; // [NOTE] - 1 to 4, number of platform, OPTIONAL

        var xoptions = {
            host: 'api.bart.gov',
            path: '/api/etd.aspx?cmd=' + vCmd + '&orig=' + vOrig + '&key=' + config.bart.client
        };

        var xcallback = function(response) {
            response.on('data', function(chunk) {
                vParsed += chunk;
            });
            response.on('end', function() {
                parseString(vParsed, function(err, result) {
                    vSave = JSON.stringify(result.root.station);
                });
            });
        };
        var vTestHttp = http.request(xoptions, xcallback).end();
        return res.send (vSave);
    });
// list all BART stations
router.route('/listAllStations')
    .get(function(req, res) {
        var vParsed = '';
        vCmd = 'stns';
        var options = {
            host: 'api.bart.gov',
            path: '/api/stn.aspx?cmd=' + vCmd + '&key=' + config.bart.client
        };
        var callback = function(response) {
            response.on('data', function(chunk) {
                vParsed += chunk;
            });

            response.on('end', function() {
                parseString(vParsed, function(err, result) {
                    vTemp = result.root.stations[0].station;
                });
            });
        };
        var vTestHttp2 = http.request(options, callback).end();
        return res.send (vTemp)
    });
module.exports = router;

感谢您的帮助。这似乎是一个简单的概念,但我似乎无法得到它。

我必须编辑。这是完整的代码。我最初只发布了一个模块。抱歉极端编辑。

1 个答案:

答案 0 :(得分:0)

尝试在传递给parseString()函数的回调中发送它。