【问题标题】:Nodejs console.log within an async function异步函数中的Nodejs console.log
【发布时间】:2019-12-29 04:53:14
【问题描述】:

谁能帮我理解为什么没有打印出产品数据?我目前正在使用 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();
})();

【问题讨论】:

标签: node.js


【解决方案1】:

您正在同时使用承诺和回调。如果您改为从 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-14
    • 2017-06-15
    • 1970-01-01
    • 2018-09-05
    • 2013-09-27
    • 2014-11-27
    • 2019-05-10
    • 2019-01-17
    相关资源
    最近更新 更多