16장. 타임라인 사이에 자원 공유하기

클릭한 순서대로 DOM이 업데이트되도록 하는 방법 → 큐(queue) 활용하기

큐(queue)

  • 넣은 순서대로 항목을 꺼낼 수 있는 데이터 구조
  • 사용자 클릭을 큐에 넣으면 넣은 순서대로 꺼낼 수 있음 Untitled (6)
  • 어떤 함수를 새로운 타임라인에서 실행하고 한 번에 한 타임라인만 실행할 수 있도록 만들어주는 고차함수
  • 여러 타임라인에 있는 액션 순서를 조율하기 위해 많이 사용함 ⇒ 동시성 기본형 : 자원을 안전하게 공유할 수 있는 재사용가능한 코드 ⇒ 액션에 순서 보장 슈퍼 파워를 줌
function Queue(worker) {
  var queue_items = [];
  var working = false;
 
  function runNext() {
    if (working) return;
    if (queue_items.length === 0) return;
    working = true;
    var item = queue_items.shift();
    worker(item.data, function (val) {
      working = false;
      setTimeout(item.callback, 0, val);
      runNext();
    });
  }
 
  return function (data, callback) {
    queue_items.push({
      data: data,
      callback: callback || function () {},
    });
    setTimeout(runNext, 0);
  };
}
 
function calc_cart_worker(cart, done) {
  calc_cart_total(cart, function (total) {
    update_total_dom(total);
    done(total);
  });
}
 
var update_total_queue = Queue(calc_cart_worker);