Пауза setTimeout

Есть массив:

Array<{type: String, text: String, time: Number}>

Есть код который добавляет элементы в массив и через n время удаляет первый добавленный элемент:

add(state, info) {
  state.list.push({
    type: info.type,
    text: info.text,
  });
  setTimeout(() => state.list.shift(), info.time);
}

При вызове функции add(), если state.list.length === 5 - необходимо остановить выполнение этой же функции, пока setTimeout не будет закончен.

Как это реализовать ?


Ответы (1 шт):

Автор решения: Igor
add(state, info) {
  let addNow = state.list.length < 5;
  if (addNow) {
    state.list.push({
      type: info.type,
      text: info.text,
    });
  } 
  setTimeout(() => {
    state.list.shift();
    if (!addNow) {
      state.list.push({
        type: info.type,
        text: info.text,
      });
    }
  }, info.time);
}
→ Ссылка