deferredSerialize = function(array, callback) {
            var length = array.length,
                results = [],
                count = 0,
                byte_length = 0;
            for (var i = 0; i < array.length; i++) {
                (function(index) {
                    serialize(array[index], function(result) {
                        // store results in order
                        results[index] = result;
                        // count byte length
                        byte_length += result[0].header_size + result[0].byte_length;
                        // when all results are on table
                        if (++count === length) {
                            // finally concatenate all reuslts into a single array in order
                            var array = [];
                            for (var j = 0; j < results.length; j++) {
                                array = array.concat(results[j]);
                            }
                            callback(array, byte_length);
                        }
                    });
                })(i);
            }
        }
deferred function to process multiple serialization in order
@param  {array}   array    [description]
@param  {Function} callback [description]
@return {void} no return value