React.js

[React] Queue 자료구조를 사용한 Task Scheduling

Chunho 2024. 5. 9. 20:57

React Cycle 내에서 앱 전반적으로 Task를 Scheduling 할 수 있는 Core Class가 필요했다.

 

Task를 순차적으로 처리해야 하므로 FIFO 구조의 Queue를 사용하였으며, 

 

type Task = () => void;

class TaskService_ {
  private queue: Task[] = [];
  private isProcessing: boolean = false;

  enqueue(task: Task): void {
    this.queue.push(task);
  }

  execute(): void {
    if (!this.isProcessing) {
      this.processQueue();
    }
  }

  processQueue(): void {
    this.isProcessing = true;
    const task = this.queue.shift();
    if (task) {
      try {
        task();
        this.isProcessing = false;
      } catch (error) {
        console.error("Error processing task:", error);
      }
    }
    if (this.queue.length === 0) {
      localStorage.setItem("isExecutedLobbyTaskQueue", "true");
      return;
    }
  }
}

export const TaskService = new TaskService_();

위와 같이 Task Queue를 생성해주었다. 해당 Class의 함수들은 React 사이클 내에서 자유롭게 사용할 수 있었으며,

나는 앱 진입 시점에서 필요한 Task를 모두 enqueue 해주어야 했으므로, 최상단에서 Custom hook을 걸어준 뒤

hook 안에서 필요한 Task들을 순차적으로 enqueue해주었다.

 

또한 필요한 시점에 execute를 호출하여 순차적으로 Task 함수들이 실행되도록 하여 필요한 함수들의 실행 순서를 제어할 수 있었다.