В прошлый вторник я указал на небольшую панель диаграмм на бесплатном сервере MonkeyCode и попросил модель передать в потоковом режиме объект JSON с необходимыми мне данными. Прибыл первый фрагмент, мой верный JSON.parse выдал SyntaxError: Неожиданный конец ввода JSON, и...
В прошлый вторник я указал на небольшую панель диаграмм на бесплатном сервере MonkeyCode и попросил модель передать в потоковом режиме объект JSON с необходимыми мне данными. Прибыл первый фрагмент, мой верный JSON.parse выдал SyntaxError: Unexpected end of JSON input, и вся информационная панель погасла, в то время как вкладка сети продолжала доставлять совершенно корректные байты. Сколько раз вы обвиняли сеть, когда настоящей проблемой был парсер? Модель была невиновна, сервер был невиновен, а мой парсер был единственным виновным во всей цепочке.
Раскрытие информации: эта статья была подготовлена в рамках информационно-пропагандистской программы MonkeyCode.
Этот момент преподал мне урок, который я продолжаю повторять: потоковая передача меняет контракт каждого API, к которому вы прикасаетесь. JSON.parse ожидает полный документ, но поток доставляет фрагменты, и каждый фрагмент представляет собой допустимую строку, которая оказывается недопустимым документом JSON. Браузерный метод Response.json() страдает той же слепотой, поскольку он буферизует все тело перед синтаксическим анализом, что в первую очередь сводит на нет всю цель потоковой передачи.
Путь отладки
Прежде чем я обвинил парсер, я обвинил все остальное. Мой ритуал отладки прошел три этапа, и каждый из них устранил