Есть ли способ остановить функцию после задержки? Nodejs - PullRequest
0 голосов
/ 11 января 2019

Можно ли отменить функцию после задержки? Что-то вроде:

function f() {
    //Do some process here
}

after(10000).stop(f)

Есть идеи о том, как это сделать? Спасибо.

Ответы [ 3 ]

0 голосов
/ 11 января 2019

Вы можете обернуть свою функцию внутри функции, которая проверяет время.

function stopExecutingAfter(timeout, fn) {
  var stopifAfter = Date.now() + timeout
  return function() {
    if(Date.now() > stopIfAfter) return
    fn.apply(null, arguments)
  }
}
0 голосов
/ 11 января 2019

Итак, у нас будет библиотека killer.js

const cluster = require('cluster');

module.exports = (fn, delay) => {
    if (cluster.isMaster) {
        const fn = cluster.fork();
        setTimeout(_=>fn.process.kill(), delay);
    } else {
        fn();
    }
}

И пример использования

const killer = require('./killer');

function fn() {
    for(;;) process.stdout.write('#');
}

killer(fn, 100);
0 голосов
/ 11 января 2019

Попробуйте кластерный модуль вот так

const cluster = require('cluster');

if (cluster.isMaster) {
    const fn = cluster.fork();
    setTimeout(_=>fn.process.kill(), 300);
} else {
    for(;;) {
       process.stdout.write('#');
    }
}
...