socket.io异步/等待"/>
与socket.io异步/等待
此代码将第一个发射发送给客户端,客户端获得messageStart:'Job正在启动...'没关系。此后,代码启动puppeteer并创建屏幕截图example.png。也可以但是第二个发射不会触发,也不会发送给客户端。在服务器的console.log中,我得到了:
- 工作开始
- 捕获完成
- 工作完成
也可以。
发生了什么事?为什么第二个发射未发射?
const express = require('express');
const puppeteer = require('puppeteer')
const app = express();
const server = app.listen(3000);
app.set('view engine', 'ejs');
var io = require('socket.io').listen(server);
app.get('/', function (req, res, next) {
res.render('index');
});
app.get('/scan', function (req, res, next) {
console.log('job is starting');
io.sockets.on('connection', function (socket) {
socket.emit('messageStart', 'Job is starting...');
});
(async () => {
const browser = await puppeteer.launch({headless:false});
const page = await browser.newPage();
await page.goto('');
await page.screenshot({ path: 'example.png' });
await browser.close();
console.log('CAPTURE FINISHED');
})().then(()=>{
console.log('job is finished');
io.sockets.on('connection', function (socket) {
socket.emit('messageEnd', 'Job is done!');
});
});
res.render('scan');
});
回答如下:您需要收听一次连接并向套接字发出两次。
const scanner = async () => {
const browser = await puppeteer.launch({headless:false});
const page = await browser.newPage();
await page.goto('https://example');
await page.screenshot({ path: 'example.png' });
await browser.close();
console.log('CAPTURE FINISHED');
}
app.get('/scan', async function (req, res, next) {
// emit to all clients on start
console.log('job is starting');
io.emit('messageStart', 'Job is starting...');
// do the actual stuff
await scanner();
// emit to all clients on finish
console.log('job is finished');
io.emit('messageEnd', 'Job is done!');
res.render('scan');
});
更多推荐
与socket.io异步/等待
发布评论