所以,很长一段时间,我正在使用node.js构建一个bot。我想要做的部分是使用来自网站的API并设置返回给变量的JSON文件的一部分(尽管在我的示例中,我使用整个返回来简化我的解释/问题)。我使用request()来访问API,如果返回了某些内容,我将变量设置为返回的JSON信息。
我知道代码正确地返回了JSON信息,因为我可以使用变量console.log()JSON文件。关键是这个变量的console.log()必须在request()中完成。如果我在request()函数之外尝试console.log(),它只会记录“undefined”。
我已经四处搜索,可以说这与异步调用有关。虽然这很有用,但我还没有找到解决这个问题的方法。
以下是request()代码的简化版本(网站缺失,因为我使用密钥来访问API)。我只想访问请求之外的变量,以便我可以将其用于其他内容。
请注意注释掉console.log()注释。代码在这里:
var parsedData;
request("WEBSITE HERE", function(error, response, body) {
if(error){
console.log("SOMETHING WENT WRONG!");
console.log(error);
}else{
if(response.statusCode==200){
parsedData = JSON.parse(body);
//console.log(parsedData); works here and prints JSON data.
}
}});
//console.log(parsedData); here console.log() is undefined.
对于声称这是链接中的副本的个人,它不是。我问如何在此函数之外使用变量,并且未在提供的链接中提出解决方案。最重要的是,它不是node.js,尽管它是Javascript。总的来说,它与异步调用有相似之处,但它不是同一个问题。
答案 0 :(得分:1)
请求是用于发出HTTP请求的最受欢迎的NPM模块之一。它支持HTTP和HTTPS,默认情况下遵循重定向。
request.get期望将url作为第一个参数,将回调作为第二个参数。 这意味着在request.get成功完成后调用回调函数。这就是为什么,(错误,响应和正文)在回调中有有效信息。执行request.get后会调用此回调,这可能需要一段时间,因为它是异步调用。
将响应存储在本地变量检查this
中