最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

与socket.io异步等待

网站源码admin14浏览0评论

与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');
});

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论