简体   繁体   English

web 抓取 function 返回“未定义”,但在我使用 console.log 时有效

[英]web scraping function returns “undefined” but works when I use console.log

const cheerio = require("cheerio");
const request = require("request");


function GetPhysicalDmg(champname) {
        request("https://champion.gg/champion/" + champname, (error, response, html) => {
        let matchupData = {}
        if (!error && response.statusCode == 200)
        {
            var $ = cheerio.load(html);
            var row = $('.footer-attr');
            var divvoorscript = row.prev().prev().html();
            eval(divvoorscript);
            var physicaldmg = Number(matchupData.championData.dmgComposition.physicalDmg);
            var magicdmg = Number(matchupData.championData.dmgComposition.magicDmg);
            var truedmg = Number(matchupData.championData.dmgComposition.trueDmg);
            return physicaldmg;
        }
    }); 
}
console.log(GetPhysicalDmg("Nautilus"))

The following logs "undefined" in the console.以下在控制台中记录“未定义”。 Apparently this is because request is an async function, and I've tried to use callback but can't wrap my head around how it works.显然这是因为请求是异步 function,我尝试使用回调,但无法理解它是如何工作的。

function GetPhysicalDmg(champname) {
        request("https://champion.gg/champion/" + champname, (error, response, html) => {
        let matchupData = {}
        if (!error && response.statusCode == 200)
        {
            var $ = cheerio.load(html);
            var row = $('.footer-attr');
            var divvoorscript = row.prev().prev().html();
            eval(divvoorscript);
            var physicaldmg = Number(matchupData.championData.dmgComposition.physicalDmg);
            var magicdmg = Number(matchupData.championData.dmgComposition.magicDmg);
            var truedmg = Number(matchupData.championData.dmgComposition.trueDmg);
            console.log(physicaldmg);
        }
    }); 
}

this returns the value as it should.这将返回应有的值。

Here's what I would do:这是我要做的:

const axios = require('axios');
const cheerio = require('cheerio');

const getPhysicalDmg = async champname => {
  let request = await axios.get("https://champion.gg/champion/" + champname)
  let matchupData = {}
  var $ = cheerio.load(request.data);
  var row = $('.footer-attr');
  var divvoorscript = row.prev().prev().html();
  eval(divvoorscript);
  var physicaldmg = Number(matchupData.championData.dmgComposition.physicalDmg);
  var magicdmg = Number(matchupData.championData.dmgComposition.magicDmg);
  var truedmg = Number(matchupData.championData.dmgComposition.trueDmg);
  return physicaldmg;
}

;(async function(){
  console.log(await getPhysicalDmg("Nautilus"))
})()

Hopefully this way is less confusing, it is to me at least.希望这种方式不那么令人困惑,至少对我来说是这样。 Also that eval in the middle is a really bad idea in general.此外,中间的 eval 通常是一个非常糟糕的主意。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 为什么console.log函数返回undefined? - Why console.log function returns undefined? 当 map 函数在代码中时,它返回 undefined,当 console.log 时,它返回一个空对象和一个数据。 我只想要数据 - when map function is in the code it returns undefined and when console.log it returns the an empty object and an the data. i just want the data 谷歌地图:函数返回未定义的值在console.log 中工作正常 - Google Maps : function returns undefined value works fine in console.log 当我的console.log类型的函数返回一个对象时,它的类型为undefined。 我不明白为什么 - When I console.log type of my function which returns an object it gives undefined. I don't understand why Object 是未定义的,但是当我 console.log 他们总是“有效” Node.js 表达 - Object is undefined, but when I console.log them always "works" Node.js express 当我console.log req.files.path时,express-formidable返回“ undefined” - express-formidable returns “ undefined” when i console.log req.files.path 当我尝试在函数中添加一些结果时,为什么 console.log 打印到控制台“未定义”? - Why the console.log prints to the console "undefined" when I try to add some results in the function? console.log和警报返回未定义 - console.log and alert returns undefined 全局范围内的 console.log(this) 返回 undefined - console.log(this) in global scope returns undefined console.log返回一个额外的未定义 - console.log returns an additional undefined
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM