Как бороться с несколькими файлами? - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть два. js -файла:

main.js

require("./randomEvent.js").start("hey");
require("./randomEvent.js").start("hi");
require("./randomEvent.js").start("hello");

randomEvent.js

var repeat = true;

exports.start = (randomString) => {

 while (repeat) {

  console.log(randomString);

 }

}

exports.stop = (randomString) => {

 repeat = false;

}

Я хочу начать randomEvent.js 3 раза, каждый с разными randomString с. И если я сделаю

require("./randomEvent.js").stop("hi");

, он должен остановить функцию start("hi") / установить repeat на false.

Как?

Заранее спасибо !

Ответы [ 2 ]

2 голосов
/ 12 апреля 2020

Вы можете реализовать свои randomEvents. js как класс. Таким образом, каждый экземпляр имеет свой собственный флаг повторения.

function RandomEvent(str) {
  this.repeat = true;

  this.randomString = str;

  this.start = () => {
    setInterval(() => {
      if (this.repeat) {
        console.log('-->', this.randomString);
      }
    }, 1000);
  }

  this.stop = () => {
    this.repeat = false;
  }
}

module.exports = RandomEvent;

и main. js

let RandomEvent = require('./randomEvent');

let sayHi = new RandomEvent('hi');
let sayHello = new RandomEvent('hello');
let sayHey = new RandomEvent('hey');

sayHi.start();
sayHello.start();
sayHey.start();

setTimeout(() => {
  console.log('stop saying hi')
  sayHi.stop();
}, 5000);

Или вы можете сохранить для каждой строки свой собственный флаг :

randomEvents. js

var repeat = {};

exports.start = (randomString) => {
  repeat[randomString] = true;
  setInterval(() => {
    if (repeat[randomString]) {
      console.log('-->', randomString);
    }
  }, 1000);
}

exports.stop = (randomString) => {
  repeat[randomString] = false;
}

и main. js

require("./randomEvent.js").start("hey");
require("./randomEvent.js").start("hi");
require("./randomEvent.js").start("hello");

setTimeout(() => {
  console.log('stop saying hi')
  require("./randomEvent.js").stop("hi");
}, 5000);
1 голос
/ 12 апреля 2020

randomEvent. js

var repeatFlags = {};

function repeatLog(str) {
 if (repeatFlags[str]) {
  console.log(str);
  setTimeout(() => {
   repeatLog(str);   
  });
 }
}

exports.start = (randomString) => {
 repeatFlags[randomString] = true;
 repeatLog(randomString);
}

exports.stop = (randomString) => {
 repeatFlags[randomString] = false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...