Я уже упоминал this question. То есть, я не верю, что моя проблема заключается в непонимании асинхронности.Почему fs.readFile возвращает буфер?
Вот соответствующая часть моего модуля.
var fs = require('fs');
var q = require('q');
var u = require('../utils/json');
var indexFile = './data/index.json';
function getIndex() {
var def = q.defer(),
promise = def.promise,
obj;
fs.readFile(indexFile, function(err,data) {
if (err) {
throw err;
def.reject(err);
}
console.log('data', data);
def.resolve(obj);
});
return promise;
}
Когда я регистрирую данные, я получаю буфер (ниже), а не содержимое JSON этого файла.
<Buffer 5b 7b 22 68 65 6c 6c 6f 22 3a 22 77 6f 72 6c 64 22 7d 5d>
Любые мысли о том, почему?
как в сторону, не бросайте 'err', если хотите отказаться от своего отложенного с ним. – Andbdrew
@Andbdrew хорошо пункт. Спасибо за совет. –
И причина, по которой API по умолчанию использует буфер вместо строки, заключается в том, что буферы являются единственным безопасным способом чтения двоичных данных. Но вы можете преобразовать буфер в строку, даже после прочтения его, либо вызывая '.toString()' непосредственно из добавления, заставляя его в контексте строки: '' '+ buffer' – slebetman