make[1]: Entering directory `/home/jifeng.zjd/git_workspace/again'
Line | Hits | Source |
---|---|---|
1 | ||
2 | /** | |
3 | * Module dependencies. | |
4 | */ | |
5 | 1 | var crypto = require('crypto'); |
6 | 1 | var __program = {}; |
7 | 1 | var __timer = {}; |
8 | ||
9 | ||
10 | 1 | function md5(str){ |
11 | 3 | var hash = crypto.createHash('md5'); |
12 | 3 | str += new Date().getTime(); |
13 | 3 | return hash.update(str, 'utf-8').digest('hex'); |
14 | } | |
15 | ||
16 | 1 | function abort(key){ |
17 | 1 | clearInterval(__program[key]); |
18 | 1 | delete __timer[key]; |
19 | } | |
20 | 1 | function again(func, interval, times){ |
21 | 3 | interval = interval || 1000; |
22 | ||
23 | 3 | var f = function () { |
24 | 3 | var that = this; |
25 | 3 | var args = f.arguments; |
26 | 3 | func.apply(that, args); //æ§è¡ä¸æ¬¡ |
27 | 3 | var key = md5(func.toString()); |
28 | 3 | var obj = {}; |
29 | 3 | if (times === 1) { |
30 | 1 | return; |
31 | } | |
32 | 2 | if (times > 1) { |
33 | 1 | obj.times = times; |
34 | 1 | obj.count = 0; |
35 | } | |
36 | 2 | __timer[key] = obj; |
37 | 2 | __program[key] = setInterval(function () { |
38 | 351 | func.apply(that, args); |
39 | 351 | if (__timer[key] && __timer[key].times) { |
40 | 1 | var obj = __timer[key]; |
41 | 1 | obj.count++; |
42 | 1 | if ((obj.times - 1) <= obj.count) { |
43 | 1 | abort(key); |
44 | } | |
45 | } | |
46 | }, interval) | |
47 | } | |
48 | 3 | return f; |
49 | } | |
50 | ||
51 | 1 | module.exports = again; |