Ошибка при синхронной записи с использованием Node.js

Я написал код, который анализирует словарь, возвращенный из Firebase, содержащий изображения, закодированные с использованием base64. Я хочу, чтобы он просто записывал эти изображения в файл, и это происходит, но я получаю следующую ошибку после завершения записи:

smalloc.cc:280: void node::smalloc::SliceOnto(const v8::FunctionCallbackInfo<v8::Value>&): Assertion `end <= source_len' failed.

Это мой код:

    // Iterate through each key in each page if each request
for (var key in request) {

    var obj = request[key];

    if (typeof (obj) == "object") {

        for (var prop in obj) {

            item++;
            if(obj.hasOwnProperty(prop)) {

                switch (prop) {

                    case "img":

                        var media = new ReceivedMedia(obj[prop]);

                        var filename = transaction.tid + "-" + item + "." + media.extension;
                        filename = filename.slice(10);
                        require('fs').writeFileSync(filename, media.b64, 'base64', function(err) {
                            if (err) throw err;
                        });
                        break;
                }
            }
        }
    }
}

Мои изображения получаются хорошо, но ошибка немного странная, и я бы предпочел, чтобы это не происходило. У кого-нибудь будет идея, почему это происходит? Это было бы очень полезно:)

Замечания: ReceivedMedia это класс, который я определил как:

function ReceivedMedia(media) {
    this.b64 = media.b64;
    this.extension = media.extension;
    this.posx = media.posx;
    this.posy = media.posy;
}

Дополнительный вопрос: если я использую writeFile вместо writeFileSync одно из моих изображений повреждено, а другое не содержит данных. Если после этого я снова запускаю скрипт узла, файлы сохраняются правильно. Я также хотел бы получить некоторые объяснения относительно того, почему это происходит, из моего понимания одно из них является синхронным (writeFileSync Я догадываюсь) а другой асинхронный (writeFile Я предполагаю).

1 ответ

Решение

Поиск в Google по вашему описанию сообщения об ошибке нашел это обсуждение проблемы в io.js и это обсуждение в node.js, и похоже, что это исправленная ошибка (не уверен, что исправление было выпущено в полной сборке). еще).

Исправление node.js здесь.

Если бы вы сейчас не могли исправить это в своей собственной сборке, вам пришлось бы применить это исправление к вашему собственному дереву кода и перестроить его. В противном случае вам придется изучить или узнать, когда это исправление попадет в официальный релиз (лично я не уверен, как этот процесс работает для node.js).

Другие вопросы по тегам