【问题标题】:Evaluating promise in REPL loop with VSCode and Pupeteer使用 VSCode 和 Puppeteer 在 REPL 循环中评估 promise
【发布时间】:2020-05-20 07:29:36
【问题描述】:

我刚开始使用 puppeteer,但节点经验很少。我对调试和尝试 REPL 循环中的代码片段很感兴趣。到目前为止,我有以下内容:

const puppeteer = require('puppeteer');


(async () => {

const browser = await puppeteer.launch({
headless: false,

});
const page = await browser.newPage();
await page.goto('https:yahoo.com');
 await page.screenshot({path: 'example.png'});

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

我尝试通过输入来拍摄第二张屏幕截图:

 page.screenshot({path: 'example1.png'});

但这会返回一个承诺。有没有办法在 REPL 循环中评估结果

编辑:

我在调试控制台底部的 REPL 中输入了这两行,输出在屏幕截图中。我是不是做错了什么?

EDIT2:

我在调试控制台底部的调试窗口 REPL 中输入了您的代码,输出在屏幕截图中。

【问题讨论】:

  • page.screenshot({path: 'example1.png'}).then(console.log)
  • (async function() { await page.screenshot({path: 'example1.png'}) console.log(">>>>") })()
  • 请看编辑..
  • 是的!似乎不支持等待。等待是es6 功能。请使用then
  • @xdeepakv 这说不通,怎么能支持模块里的await,控制台里不支持呢?是同一个口译员!

标签: javascript node.js visual-studio-code puppeteer


【解决方案1】:

如果您想用 REPL 中的结果付款,您必须执行以下操作:

var res; page.screenshot({path: 'example1.png'}).then(r => {res=r;console.log('done')});

done 字符串被打印出来,你将在 res 变量中得到结果,这样你就可以使用它了。

一步一步:

  • var res 声明了一个空变量,以便您以后可以使用它

  • page.screenshot({path: 'example1.png'}) 将返回一个承诺,因此.then 紧随其后

  • .then 接收到一个函数,该函数将在 promise 被解决时异步调用。将通过一些输入调用该函数。

  • r => {res=r;console.log('done')} 这是传递给该承诺的then 的匿名函数。 page.screenshot(...).then 传递的参数将存储在 r 参数/变量中。

  • res=r; 这会将 promise 解析中发送的参数设置为 res 变量。

  • console.log('done') 就在那里,所以你会知道承诺何时解决。

  • 之后,您可以检查 res 变量以详细了解其中的内容。

您可以将此方法用于任何类型的承诺解析调试,因为在控制台中(目前)我们无法运行类似var res = await page.screenshot({path: 'example1.png'}) 的东西

【讨论】:

  • 有了唯一的答案,我给你积分。我不明白 res 和 r 是什么。你介意扩大答案吗?不太了解节点。
  • 我添加了一个解释。让我知道是否足够清楚。
猜你喜欢
  • 2020-01-06
  • 1970-01-01
  • 2021-09-14
  • 2012-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
  • 1970-01-01
相关资源
最近更新 更多