1 /** The minplayer namespace. */ 2 var minplayer = minplayer || {}; 3 4 /** 5 * @constructor 6 * @class This class keeps track of asynchronous get requests for certain 7 * variables within the player. 8 */ 9 minplayer.async = function() { 10 11 /** The final value of this asynchronous variable. */ 12 this.value = null; 13 14 /** The queue of callbacks to call when this value is determined. */ 15 this.queue = []; 16 }; 17 18 /** 19 * Retrieve the value of this variable. 20 * 21 * @param {function} callback The function to call when the value is determined. 22 * @param {function} pollValue The poll function to try and get the value every 23 * 1 second if the value is not set. 24 */ 25 minplayer.async.prototype.get = function(callback, pollValue) { 26 27 // If the value is set, then immediately call the callback, otherwise, just 28 // add it to the queue when the variable is set. 29 if (this.value !== null) { 30 callback(this.value); 31 } 32 else { 33 34 // Add this callback to the queue. 35 this.queue.push(callback); 36 } 37 }; 38 39 /** 40 * Sets the value of an asynchronous value. 41 * 42 * @param {void} val The value to set. 43 */ 44 minplayer.async.prototype.set = function(val) { 45 46 // Set the value. 47 this.value = val; 48 49 // Get the callback queue length. 50 var i = this.queue.length; 51 52 // Iterate through all the callbacks and call them. 53 if (i) { 54 while (i--) { 55 this.queue[i](val); 56 } 57 58 // Reset the queue. 59 this.queue = []; 60 } 61 }; 62