2014-02-28 2 views
0

Я работаю в Meteor.js с библиотекой recorderJs и пытается хранить стерео аудио буферы в MongoDB.Meteor.methods() преобразует Float32Array в объект

На клиенте, console.log(buffers) дает массив формы

[Float32Array, Float32Array] 

Но после прохождения его Meteor.methods с Meteor.call('newSound', buffers) с методом

Meteor.methods({ 
    newSound: function(buffers) { 
     console.log(buffers); 
    } 
} 

Я получаю массив так:

[Object, Object] 

Почему Meteor преобразует массивы в objec ц? После извлечения, мне нужно работать с данными как буферы массива, и может повторно преобразовывать их с

var buffers = new Array(
    _.toArray(buffers[0]), 
    _.toArray(buffers[1]) 
); 

, но я обеспокоен производительности. Должен ли я конвертировать буферы в капли, прежде чем хранить их в базе данных, а затем переустанавливать, когда я их получаю?

ответ

1

Только совместимые с EJSON типы будут автоматически преобразованы из объектов JSON в их фактический тип JavaScript. Читайте о EJSON здесь:

http://docs.meteor.com/#ejson

Я не верю, что Float32Array было сделано EJSON совместимы командой Метеор. Для получения дополнительной информации о EJSON и как вы можете сделать типа совместимы, смотреть эти видео:

Существует также EJSON.newBinary(), который могут быть полезны для вас.

+0

Спасибо, у меня были проблемы с пониманием, с чего начать. Документы говорят, что EJSON поддерживает «JavaScript Uint8Array» или результат «EJSON.newBinary». – apostl3pol

+0

Я нашел полезную статью о MDN, которая объясняет типизированные массивы в Javascript: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays. То, что я не понимал, состоит в том, что эти массивы представляют собой разные представления одних и тех же двоичных данных. – apostl3pol

Смежные вопросы