-
Notifications
You must be signed in to change notification settings - Fork 27
/
race.js
executable file
·55 lines (50 loc) · 1.47 KB
/
race.js
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
/**
* This plugin prevents from duplicate resource loading
*
* Flag "race"
*
* This plugin provides private "race_callbacks" function
*/
/**
* @name sandbox
*/
(function (sb) {
var race_callbacks = {},
/**
* Creates race.
*
* @param {String} name race name
* @param {Function} callback callback
*/
create_race = function (name, callback) {
if (!race_callbacks[name]) {
// create race
race_callbacks[name] = [];
}
race_callbacks[name].push(callback);
return function (result) {
var callbacks = race_callbacks[name];
while(callbacks && callbacks.length) {
callbacks.shift()(result);
}
// reset race
race_callbacks[name] = false;
}
};
/**
* @event *:request-race race module request eg for cases when some async modules are required simultaneously
*
* @param {String} moduleName race for module name
* @param {Function} callback this callback will be called when module inited
*
* @retuns yes returns callback if race is empty or only 1 item in it
*/
sb.on('*:request-race', function (moduleName, callback) {
callback = create_race(moduleName, callback);
if (race_callbacks[moduleName].length > 1) {
return [moduleName];
} else {
return [moduleName, callback];
}
});
}(sandbox));