var request = require('request');
var cheerio = require('request');
var eval = "5555";
request('http://google.com', function (error, response, body) {
if (!error && response.statusCode == 200) {
var keys = body.split(",");
eval = keys[0]; // Think keys[0] is 7777
// and no problem in if statement, it must be excuted.
}
})
console.log("evalue :"+eval);
// result ---> 5555
为什么结果是5555?不是7777?我认为eval是全局值,if语句会将eval值更新为7777,我认为结果将是7777但我意识到它没有。谁能告诉我为什么。对不起,类似的问题。
答案 0 :(得分:2)
request
中的回调是异步。
因此,当您调用console.log
时,它会在执行request
回调之前。尝试登录回调本身
request('http://google.com', function (error, response, body) {
if (!error && response.statusCode == 200) {
var keys = body.split(",");
eval = keys[0]; // Think keys[0] is 7777
console.log("evalue :"+eval);
}
})
答案 1 :(得分:1)
您正在执行异步任务。
回调函数不一定在console.log
之前运行。
这是javascript非阻塞IO的本质。当你需要进行IO操作时,可以传递回调,当IO完成时,它将调用你的回调,同时CPU可以自由地在你的JS文件中执行其他过程。
答案 2 :(得分:0)
因为console.log
是在上述请求之前执行的,所以响应已经到来,因为这是异步执行。尝试将console.log
放在匿名函数中以获得所需的值。
request('http://google.com', function (error, response, body) {
if (!error && response.statusCode == 200) {
var keys = body.split(",");
eval = keys[0]; // Think keys[0] is 7777
console.log(eval);
}
})