进程在控制台被阻止.log当组合读取行和木偶时



以下代码将在console.log("this line.....");之前被永久阻止。

const puppeteer = require('puppeteer');
const readline = require("readline");
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
async function main() {
    browser = await puppeteer.launch();
    rl.close();
    await browser.close();  
    console.log("this line will not be executed.");
}
main();

rl.close()移到console.log下面可以解决此问题,删除browser = .....await browser.close()也这样做了。

这是傀儡师的虫子吗?还是有什么我不明白的机制?

木偶师版本:1.11.0
节点.js版本:10.14.2
操作系统:Windows 10 1803<</p>

div class="one_answers">

这似乎值得报告给傀儡师GitHub存储库的问题。在这种组合之后,stdin和事件循环发生了一些非常奇怪的事情(Chrome确实退出了,但Node.js仍然存在,并且在Ctrl + C中止后,提示在Windows shell中出现两次,就好像ENTER被缓冲到退出一样)。

FWIW,如果readline.createInterface()选项设置为 false terminal,则此问题将消失。

似乎你并不完全理解 ASYNC/AWAIT 在 js 中是如何工作的。

如果您在异步函数

中使用 await,它将暂停异步函数并等待 Promise 解析,然后再继续。

异步函数中的代码将像同步一样一致地处理,但不会阻塞主线程。

async function main() {
    browser = await puppeteer.launch(); // will be executed first
    rl.close();// will be executed second (wait untill everithing above is finished)
    await browser.close(); // will be executed third (wait untill everithing above is finished)
    console.log("this line will not be executed."); // will be executed forth (wait untill everithing above is finished)
}

最新更新