异步函数中的Node.js console.log

时间:2019-12-28 01:15:24

标签: node.js

有人可以帮助我理解为什么没有打印出产品数据吗?我目前正在使用puppeteer抓取网站以获取产品数据。

const puppeteer = require("puppeteer");

(async () => {
  const browser = await puppeteer.launch({ headless: false });
  const page = await browser.newPage();
//link to page that i want to scrape
  await page.goto(
    "link link",
    { waitUntil: "networkidle2" }
  );

  var data = await page
    .evaluate(() => {
      var productData = {};
      productData["brand"] = document.querySelector(
        "a.designer-name > span"
      ).textContent;
      console.log("mimo");
      return productData;
    })
    .catch(err => {
      console.log(err);
    });
  console.log(data);

  await browser.close();
})();

1 个答案:

答案 0 :(得分:0)

您正在同时使用promise和callback。如果您改为从page.evaluate返回承诺,则该承诺应会起作用。

感谢@tehhowch。

var data = await page
  .evaluate(async () => {
    return await new Promise(resolve => { // <-- return the data to node.js from browser
      var productData = {};
      productData["brand"] = document.querySelector(
        "a.designer-name > span"
      ).textContent;
      console.log("mimo");
      resolve(productData);
    });
  })
  .catch(err => {
    console.log(err);
  });
console.log(data);