【发布时间】:2020-04-07 08:30:54
【问题描述】:
- createReadStream(使用 Symbol.asyncIterator)
async function* readChunkIter(chunksAsync) {
for await (const chunk of chunksAsync) {
// magic
yield chunk;
}
}
const fileStream = fs.createReadStream(filePath, { highWaterMark: 1024 * 64 });
const readChunk = readChunkIter(fileStream);
- 读取同步
function* readChunkIter(fd) {
// loop
// magic
fs.readSync(fd, buffer, 0, chunkSize, bytesRead);
yield buffer;
}
const fd = fs.openSync(filePath, 'r');
const readChunk = readChunkIter(fd);
生成器函数有什么更好的用途,为什么?
upd:我不是在寻找更好的方法,我想知道使用这些功能的区别
【问题讨论】:
-
完全取决于用例。有人会说最好始终保持异步,但是如果您的程序在加载关键文件之前无法继续运行,为什么还要为开销而烦恼呢?在您的示例中,它们都以同步方式有效运行。
-
正如您将在 stackoverflow 上学到的那样,哪个更好完全是意见,直到您提供一些客观标准来判断如何更好并提出问题主要是因为意见不鼓励在这里(并且经常被否决,尽管我没有对你投反对票,因为你是新来的)。我在下面的回答中就您的一般两种方法提供了 cmets(尽量避免对事物的意见方面)。
-
@jfriend00,谢谢你的回答。我真的没有问正确的问题。我不是在寻找更好的方法,我想知道使用这些功能之间的区别。
-
我在下面的答案中添加了一条关于此的注释。在 stackoverflow 上,如果您意识到您没有传达正确的问题,您可以使用问题下方的“编辑”链接来澄清您的问题(在问题中,而不仅仅是在 cmets 中)。这应该是为了澄清你原来的问题,而不是把它变成一个完全不同的问题(因为这对已经回答了你原来的问题的人是不公平的)。