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()
для использования файла, записанного на диск.в действительности кажется, что мой код запускается до того, как файл завершил запись на диск, поэтому мне приходит в голову, что обещание, возвращаемое вышеуказанным кодом, должно учитывать возникновение события 'end' в потоке.может быть что-то вроде этого:
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) если у меня нет доступа к нему, как я могу узнать, когда поток чтения закрылся, чтобы я мог разрешить?
ps
и нет, я могу 'получить поток из .pipe()
, который возвращает неопределенное значение