CHAPTER 17 타임라인 조율하기
CHAPTER 17 타임라인 조율하기
타임라인을 나누기 위한 동시성 기본형
경쟁조건(race condition)은 어떤 동작이 먼저 끝나는 타임라인에 의존할 때 발생합니다
코드에 Cut() 적용하기
function Cut(num, callback) {
var num_finished = 0;
return function() {
num_finished += 1;
if(num_finished === num)
callback();
};
}
var done = Cut(3, function() {
console.log("3 timelines are finished");
});
done();
done();
done();
function calc_cart_total(cart, callback) {
var total = 0;
var done = Cut(2, function() {
callback(total);
});
cost_ajax(cart, function(cost) {
total += cost;
done();
});
shipping_ajax(cart, function(shipping) {
total += shipping;
done();
});
}
딱 한 번만 호출하는 기본형
최초 한 번만 효과가 발생하는 액션을 멱등원(idempotent)이라고 합니다.
function sendAddToCartText(number) {
sendTextAjax(number, "Thanks for adding something to your cart. Reply if you have any questions!");
}
function JustOnce(action) {
var alreadyCalled = false;
return function(a, b, c) {
if(alreadyCalled) return;
alreadyCalled = true;
return action(a, b, c);
};
}
var sendAddToCartTextOnce = JustOnce(sendAddToCartText);
sendAddToCartTextOnce("555-555-5555-55");
sendAddToCartTextOnce("555-555-5555-55");
sendAddToCartTextOnce("555-555-5555-55");
sendAddToCartTextOnce("555-555-5555-55");
요약: 타임라인 사용하기
- 타임라인 수를 줄입니다
- 타임라인 길이를 줄입니다
- 공유 자원을 업앱니다
- 동시성 기본형으로 자원을 공유한다
- 동시성 기본형으로 조율한다