Request 之外的数据未定义
Data outside of Request is Undefined
调用代码的部分。
** index.js **
var express = require('express');
var request = require('request');
var cheerio = require('cheerio');
var RagialJS = express();
RagialJS.get('/scrape', function(req, res){
console.log(getItemJSON("Minor Brisket", "Renewal"));
}) // End RagialJS.get
我希望这会打印出一个 JSON 对象,但 returns 未定义。
** getItemJSON() **
// Returns buy, sell, and metrics of item as a JSON
function getItemJSON(itemName, server) {
var url = getItemURL(itemName, server);
request(url, function(error, response, html) {
if(!error && response.statusCode == 200) {
var $ = cheerio.load(html);
// Logic that parses and puts data in JSON here...
// console.log(json); works here
return json;
} else {
console.log(error);
}
}); // End request
// console.log(json); DOESN'T works here
}
这里的问题是,如果我在请求结束之前 console.log(json);
那么它工作正常但是如果我在请求(或另一个函数)之外执行它那么它 returns 未定义。 (getItemURL()
同样的问题)
有没有办法解决这个问题?还是我忽略了有关数据请求的一些基本概念?
Full Source Code if interested
如有任何帮助或意见,我们将不胜感激。
主要问题是您正在进行异步调用并期望以一种正确的方式获得结果。
请求函数第二个参数是请求得到响应时调用的回调。
所以问题是:
request(url, function(error, response, html) {
console.log('A');
}) // End Request
console.log('B');
您期望控制台输出是:
A
B
但输出是:
B
A
这是因为该函数是异步的,它会在请求获得响应时调用,并且代码会在请求等待该响应时继续执行。
*我已经下载了你的代码并做了一些改动来测试它,如果你想让我发给你,请告诉我。
调用代码的部分。
** index.js **
var express = require('express');
var request = require('request');
var cheerio = require('cheerio');
var RagialJS = express();
RagialJS.get('/scrape', function(req, res){
console.log(getItemJSON("Minor Brisket", "Renewal"));
}) // End RagialJS.get
我希望这会打印出一个 JSON 对象,但 returns 未定义。
** getItemJSON() **
// Returns buy, sell, and metrics of item as a JSON
function getItemJSON(itemName, server) {
var url = getItemURL(itemName, server);
request(url, function(error, response, html) {
if(!error && response.statusCode == 200) {
var $ = cheerio.load(html);
// Logic that parses and puts data in JSON here...
// console.log(json); works here
return json;
} else {
console.log(error);
}
}); // End request
// console.log(json); DOESN'T works here
}
这里的问题是,如果我在请求结束之前 console.log(json);
那么它工作正常但是如果我在请求(或另一个函数)之外执行它那么它 returns 未定义。 (getItemURL()
同样的问题)
有没有办法解决这个问题?还是我忽略了有关数据请求的一些基本概念?
Full Source Code if interested
如有任何帮助或意见,我们将不胜感激。
主要问题是您正在进行异步调用并期望以一种正确的方式获得结果。
请求函数第二个参数是请求得到响应时调用的回调。
所以问题是:
request(url, function(error, response, html) {
console.log('A');
}) // End Request
console.log('B');
您期望控制台输出是:
A
B
但输出是:
B
A
这是因为该函数是异步的,它会在请求获得响应时调用,并且代码会在请求等待该响应时继续执行。
*我已经下载了你的代码并做了一些改动来测试它,如果你想让我发给你,请告诉我。