【问题标题】:NODE.JS how to return data collected using cheerio (keeps returning nothing) [duplicate]NODE.JS如何返回使用cheerio收集的数据(不返回任何内容)[重复]
【发布时间】:2018-05-01 15:39:21
【问题描述】:

我正在使用 Node.js 制作聊天机器人。我使用cheerio 从html 中抓取信息并将其发送给用户。我可以抓取数据并将其打印到控制台,但不能将该信息返回给变量。请帮忙。

--解析部分--

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

const init_url = "https://stu.dje.go.kr/sts_sci_md01_001.do?schulCode=G100000208&schulCrseScCode=4&schulKndScCode=04&schMmealScCode=2";

const MealParser = {};

MealParser.parse = () => {
  console.log(''+init_url);
  return doRequest(makeURL(),function(err,data){
    console.log(data);
    return data;
  });
}

function doRequest(url,callback){
  request(url, function(err, resp, html) {
      var list = ["initial array"];
      if (!err){
      const $ = cheerio.load(html);
      $('.tbl_type3 th:contains("중식")').parent().children().each(function () {
        list.push($(this).text());
      });
      return callback(null,list);
    }
  });
}

function makeURL(){
  var result_url = init_url;
  return result_url;
}

module.exports = MealParser;

我使用函数“parse”将报废的信息返回给主机器人,如下面的代码。

--使用解析的信息--

var result = MealParser.parse();

【问题讨论】:

    标签: javascript html node.js bots


    【解决方案1】:

    您的回调正在返回一个值,我认为您应该研究一下回调的工作原理。

    如果您将基于回调的函数转换为 Promise,您可以执行以下操作:

    MealParser.parse = () => {
      console.log(''+init_url);
      return doRequest(makeURL())
      .then(
        data=>{
          console.log(data);
          return data;
        },
        error=>console.error(error)
      )
    }
    
    function doRequest(url,callback){
      return new Promise(
        (resolve,reject)=>
          request(url, function(err, resp, html) {
            const list = ["initial array"];
            if(err){
              reject(err);
            }else{
              const $ = cheerio.load(html);
              $('.tbl_type3 th:contains("중식")').parent().children().each(function () {
                list.push($(this).text());
              });
              // return callback(null,list);//no use returning anything from a callback
              resolve(list);
            }
          })
      );
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-10
      • 1970-01-01
      • 2013-02-18
      • 1970-01-01
      • 2016-09-16
      • 1970-01-01
      • 2020-04-22
      • 1970-01-01
      相关资源
      最近更新 更多