栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如果超时则取消正则表达式匹配

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如果超时则取消正则表达式匹配

您可以生成一个进行正则表达式匹配的子进程,并在10秒钟内未完成将其杀死。可能有点过大,但是应该可以。

如果沿着这条路走,那么fork应该是您应该使用的。

如果您可以原谅我的非纯函数,那么这段代码将展示您如何在派生的子进程与主进程之间来回通信的要点:

index.js

const { fork } = require('child_process');const processPath = __dirname + '/regex-process.js';const regexProcess = fork(processPath);let received = null;regexProcess.on('message', function(data) {  console.log('received message from child:', data);  clearTimeout(timeout);  received = data;  regexProcess.kill(); // or however you want to end it. just as an example.  // you have access to the regex data here.  // send to a callback, or resolve a promise with the value,  // so the original calling pre can access it as well.});const timeoutInMs = 10000;let timeout = setTimeout(() => {  if (!received) {    console.error('regexProcess is still running!');    regexProcess.kill(); // or however you want to shut it down.  }}, timeoutInMs);regexProcess.send('message to match against');

regex-process.js

function respond(data) {  process.send(data);}function handleMessage(data) {  console.log('handing message:', data);  // run your regex calculations in here  // then respond with the data when it's done.  // the following is just to emulate  // a synchronous computational delay  for (let i = 0; i < 500000000; i++) {    // spin!  }  respond('return regex process data in here');}process.on('message', handleMessage);

但是,这最终可能掩盖了真正的问题。您可能需要考虑像其他海报所建议的那样对正则表达式进行重做。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/394678.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号