README содержит следующий код в качестве примера записи извлеченного файла:
fetch('https://assets-cdn.github.com/images/modules/logos_page/Octocat.png')
.then(res => {
const dest = fs.createWriteStream('./octocat.png');
res.body.pipe(dest);
});
к которому я бы присоединил еще один .then()
, чтобы использовать файл, записанный на диск. на самом деле кажется, что мой код запускается до того, как файл закончит запись на диск, поэтому мне приходит в голову, что обещание, возвращаемое приведенным выше кодом, должно учитывать выдачу события «конец» в потоке. может что-то вроде этого:
fetch(url).then(res => new Promise((resolve, reject) => {
const dest = fs.createWriteStream(fn);
res.body.pipe(dest);
res.body.on('end', () => resolve());
dest.on('error', reject);
}));
но когда я пытаюсь запустить этот код, он жалуется:
TypeError: res.body.on не является функцией
что имеет смысл, учитывая, что res.body
выглядит так:
{ pipe: [Function: pipe] }
то есть это вообще не поток
два вопроса: 1) как мне получить доступ к реальному стриму? 2) если у меня нет к нему доступа, как я могу узнать, когда поток чтения закрылся, чтобы я мог решить?
p.s.
и нет, я не могу получить поток от .pipe()
, который возвращает undefined