我是node.js的新手,而且我一直在努力探索如何使用它。在此范围内,resp可以很好地记录大量数据。除此之外,mydata是未定义的。我无法弄清楚为什么会这样,并希望有人可以帮助我从代码块中获取resp数据。
var mydata = this.get_json((_servers[i].ip + "/job/" + _servers[i].job + "/lastCompletedBuild/testReport/api/json"), function (resp) {
console.log(resp);
});
console.log(mydata)
答案 0 :(得分:2)
您的功能是异步的。这意味着this.get_json()
调用只是启动操作,然后您的Javascript执行继续。然后,在网络响应返回时的某个时间,它会调用回调函数。
因此,您可以使用响应的唯一位置是回调内部。您可以从回调内部调用另一个函数并将数据传递给它,但是在函数之后不能使用代码中的数据。
this.get_json((_servers[i].ip + "/job/" + _servers[i].job + "/lastCompletedBuild/testReport/api/json"), function (resp) {
// use the response here
console.log(resp);
// or call some other function and pass the response
someOtherFunc(response);
});
// you cannot use the response here because it is not yet available
这被称为异步编程,是node.js编程的核心原则,因此您必须学习如何操作,并且在使用通过异步回调返回结果的异步操作时必须调整编程风格以此方式工作。这绝对不同于纯顺序/同步编程。使用node.js时,这是一个新的东西。
有许多高级工具可以使用异步响应进行编程,例如在尝试协调多个异步操作时特别重要的promises(对它们进行排序,并行运行并知道何时完成,传播错误等等)
您可能会发现这些相关答案很有用:
Node.JS How to set a variable outside the current scope
Order of execution issue javascript