【发布时间】:2017-06-08 05:00:50
【问题描述】:
上下文
在我进入 Typescript 的过程中,有人建议我不应该在异步代码中进行阻塞调用。
我也在使用生成器,因为它们使目录遍历变得容易并且避免耗尽堆栈空间。
但是,当我将异步代码(在本例中:readdir)与生成器结合使用时,编译器会抱怨 yield 只能在生成器内部使用,这让我认为编译器不是能够一次性组合闭包、生成器和异步代码。
function *yyyymmGenerator(dir: string, props: Props) {
const fs = require("fs");
const yyyy = props.range.getUTCFullYear().toString();
const mm = props.range.getUTCMonth().toString();
const start = `${yyyy}-${mm}`;
const files = fs.readdir(dir, function(err, files) {
for (let i = 0; i < files.length; i++) {
const file: string = files[i];
if (file.localeCompare(start) >= 0) {
const d = `${dir}/${file}`;
yield file;
}
}
});
}
error TS1163: A 'yield' expression is only allowed in a generator body.
问题
在这种情况下,推荐的最佳做法是什么?
如果我只考虑所有内容同步、阻塞代码但将调用“包装”在 Promise 中,这样可以吗?
【问题讨论】:
标签: node.js asynchronous typescript generator