Xge
Xge

Reputation: 450

How to deal with multiple files?

I have two .js-files:

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;

}

I want to start randomEvent.js 3 times, each with different randomStrings. And if I do

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

it should stop the start("hi") function / it should set repeat to false.

How?

Thanks in advance!

Upvotes: 0

Views: 50

Answers (2)

Saeed
Saeed

Reputation: 5488

You can implement your randomEvents.js as a class. So every instance has its own repeat flag.

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;

and 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);

Or you can store for every string, its own flag:

randomEvents.js

var repeat = {};

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

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

and in 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);

Upvotes: 2

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;
}

Upvotes: 1

Related Questions