언어/js

closure & promise

조규현15 2016. 2. 23. 17:52
반응형
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
var TimerModule = (function(){
  var timer = {
    time: 0,  // default
    get: function(){
        return this.time;
    },
    set: function(_time){
        this.time = _time;
    },
    tick: function(_tick){
      this.time += _tick
    }
  };
  var startTimer = 0, endTimer = 1000;  // default
 
  return {
    setTimer: function(_startTime, _endTime){
      timer.set(_startTime);
      startTimer = _startTime;
      endTimer = _endTime;
    },
    isTick: function(){
      return (timer.get() > endTimer);
    },
    addTick: function(_tick){
      timer.tick(_tick);
    },
    resetTick: function(_endTime){
      timer.set(startTimer);
      endTimer = _endTime;
    }
  };
})();
 
var TextModule = (function(){
  var text = "";
  var currentIndex = 0;
  var timerModule;
  TypingText = function(){
      if(timerModule.isTick()){
        switch(text[currentIndex++])
        {
          case '.':
            timerModule.resetTick(500); // millisecond
          break;
          case ' ':
          case '?':
          case '!':
            timerModule.resetTick(800);
          break;
          default:
            timerModule.resetTick(1000);
          break;
        }
      }
      return text.substring(0, (currentIndex < text.length) ? currentIndex : text.length);
  }
 
  return{
    setText: function(_text, _timerModule){
      if(typeof(_text) != "string" || typeof(_timerModule) != typeof(TimerModule)){
          console.log("TypeError >> TextModule");
          return ;
      }
      text = _text;
      timerModule = _timerModule;
    },
    readText: function(_elapseTick){
      timerModule.addTick(_elapseTick);
      return TypingText();
    }
  };
})();
/* Test Code */
var _testModule1 = function(){
  return new Promise(function(resolve, reject) {
    TimerModule.setTimer(01000);  // Set Initial_Time
    resolve();
  });
};
var _testModule2 = function(){
  return new Promise(function(resolve, reject) {
      TextModule.setText("사랑해요... 지성군!", TimerModule);
      resolve();
  });
};
var _testModule3 = function(){
  var lastTick;
  var Update = function(){
    var currentTick = new Date().getTime();
    var elapseTick = currentTick - (lastTick || currentTick);
 
    console.log(TextModule.readText(elapseTick));
 
    lastTick = currentTick;
  }
  return new Promise(function(resolve, reject) {
    setInterval(Update, 100);
    resolve();
  });
};
Promise.all([_testModule1(), _testModule2(), _testModule3()]).then(function(){
  console.log("All Completed");
});
cs


반응형

'언어 > js' 카테고리의 다른 글

ECMAScript 6 Tutorial  (0) 2016.02.26
commonjs & require  (0) 2016.02.23
closure  (0) 2016.02.23
Module Pattern  (0) 2016.02.23
즉각 실행  (0) 2016.02.23