您可以生成一个进行正则表达式匹配的子进程,并在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);但是,这最终可能掩盖了真正的问题。您可能需要考虑像其他海报所建议的那样对正则表达式进行重做。



