写入 node-fetch 返回的流
Writing the stream returned by node-fetch
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()
以使用写入磁盘的文件。实际上,我的代码 运行s 在文件完成写入磁盘之前出现,所以我想到上面代码返回的承诺应该考虑 '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 is not a function
鉴于 res.body
看起来像这样:
{ pipe: [Function: pipe] }
也就是说,根本不是流
两个问题:
1)我怎样才能访问实际的流?
2) 如果我无法访问它,我怎么知道读取流何时关闭以便我可以解析?
p.s.
不,我无法从 .pipe()
获取流,returns 未定义
据我所知,您的代码是正确的。我运行
const fs = require("fs");
const fetch = require("node-fetch");
fetch("https://assets-cdn.github.com/images/modules/logos_page/Octocat.png")
.then(
res =>
new Promise((resolve, reject) => {
const dest = fs.createWriteStream("./tmp.txt");
res.body.pipe(dest);
res.body.on("end", () => resolve("it worked"));
dest.on("error", reject);
})
)
.then(x => console.log(x));
它完全按照预期工作并打印了 "it worked"
我明白了。当可读流关闭时,可写流将自动关闭。所以我可以挂钩:
fetch(url).then(res => new Promise((resolve, reject) => {
const dest = fs.createWriteStream(fn);
res.body.pipe(dest);
dest.on('close', () => resolve());
dest.on('error', reject);
}));
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()
以使用写入磁盘的文件。实际上,我的代码 运行s 在文件完成写入磁盘之前出现,所以我想到上面代码返回的承诺应该考虑 '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 is not a function
鉴于 res.body
看起来像这样:
{ pipe: [Function: pipe] }
也就是说,根本不是流
两个问题: 1)我怎样才能访问实际的流? 2) 如果我无法访问它,我怎么知道读取流何时关闭以便我可以解析?
p.s.
不,我无法从 .pipe()
获取流,returns 未定义
据我所知,您的代码是正确的。我运行
const fs = require("fs");
const fetch = require("node-fetch");
fetch("https://assets-cdn.github.com/images/modules/logos_page/Octocat.png")
.then(
res =>
new Promise((resolve, reject) => {
const dest = fs.createWriteStream("./tmp.txt");
res.body.pipe(dest);
res.body.on("end", () => resolve("it worked"));
dest.on("error", reject);
})
)
.then(x => console.log(x));
它完全按照预期工作并打印了 "it worked"
我明白了。当可读流关闭时,可写流将自动关闭。所以我可以挂钩:
fetch(url).then(res => new Promise((resolve, reject) => {
const dest = fs.createWriteStream(fn);
res.body.pipe(dest);
dest.on('close', () => resolve());
dest.on('error', reject);
}));