Здравствуйте. Постараюсь кратко описать проблему. Есть класс:
class RedisAPI {
constructor(redis) {
this.masterID = new Array(); //здесь хранятся уникальные ID всех воркеров
this.master = redis.createClient();
}
addWorker(id) {
this.masterID.push(id);
console.log(`Worker ${id} is working!`);
}
//отправление сообщения на обработку одному из воркеру
emit() {
let needID = this.masterID.splice(0, 1);
console.log(`arr: ${this.masterID.length}; first: ${needID[0]}`);
this.masterID.push(needID[0]);
}
//отправление сообщения на обработку одному из воркеров каждые ms секунд
emitTimeout(ms) {
setInterval(() => {
this.emit();
}, ms);
}
}
После двух асинхронных добавления данных в RedisAPI.masterID код начинает себя странно вести, а именно:
const queue = new RedisAPI(redis);
queue.emitTimeout(1000);
А в консоли вижу:
arr: 1; first: undefined
arr: 1; first: id1499261061279
arr: 1; first: undefined
arr: 1; first: id1499261061279
И так чередуется. То есть не получается грамотно удалить первый элемент масиива, хотя он всегда есть. В чём может быть проблема?