我的变量不会使用node.js

时间:2018-09-19 14:18:39

标签: node.js asynchronous

我正在尝试学习node.js,目前我只是试图将内容打印出响应。我正在从NHL api获取团队花名册,并且我可以console.log它并获取数据。但是,当我尝试调用该函数到response.write时,该变量为空。

这是tutorial.js。正是gt.getTeam(team)返回一个空字符串(如下所示,来自“ my_hockey_team.js”的变量“ players”)。

var http = require("http");
var gt = require("./my_hockey_team");
let team = process.argv.slice(2);

console.log(team[0]);

http.createServer(function (request, response){
  response.writeHead(200, {'Content-Type': 'text/html'});
  response.write("Players are"  + gt.getTeam(team[0]));
  console.log(gt.getTeam(team[0]));
  response.end("Hello World");
}).listen(3000);
console.log("Server running at 127.0.0.1");

process.on('uncaughtException', function (err) {
    console.log(err);
});

这是my_hockey_team.js。在getTeam函数内部,永远不会填充“玩家”变量。我不知道它是异步的东西还是作用域的东西或它是什么。

const https = require ('https');
var http = require("http");

function getTeam(teamNr){
  let players = "";
  const request = https.get(`https://statsapi.web.nhl.com/api/v1/teams/${teamNr}/roster`, response => {
    let body = "";
    if (response.statusCode !== 200){
      request.abort();
    }
    response.on('data', data => {
      body += data;
    });

    response.on('end', () => {
      if (response.statusCode === 200){
        try {
          const team = JSON.parse(body);
          for (var i in team.roster){
            players += team.roster[i].person.fullName;
          }
        } catch(error) {
          console.log(error.message);
        }
      }
    });
  });
  request.on('error', error => {
    console.error(error.message + "Nåt gick fel med lagen?");
  });

  return players;
}

module.exports.getTeam = getTeam;

如果我取消对respons.on('end ..)内部的console.log的注释,我会获取所有想要的数据,但是当我调用getTeam函数时,'players'变量只是一个空字符串。有人可以告诉我我在做什么错。 谢谢!

1 个答案:

答案 0 :(得分:0)

getTeam需要是一个异步函数,返回一个Promise,或者(如果您使用的是Node的旧版本)进行回调,然后您的调用代码需要适当地处理它。现在,该方法似乎正确设置了所有异步响应处理,然后在实际发生任何操作之前返回初始化后的players