【发布时间】:2014-03-20 11:33:55
【问题描述】:
我正在尝试了解 JavaScript 和 Node.js 中的生成器和产量,但遇到了一个问题。
理想情况下,我想做的是用生成器/yield 包装 fs.readFile,这样我就可以同步使用它而不会阻塞任何东西。
我想出了以下代码:
function readFileSync (path) {
return (function *(){
return yield require('fs').readFile(path, function *(err, data){
yield data;
});
})();
}
console.log(readFileSync('test-file.txt'));
但不幸的是,readFileSync 总是返回 {} 而不是文件内容。
希望我想要实现的目标仍然是可能的,或者我完全错过了生成器/产量的意义,并且我完全错误地使用它,在这种情况下指出我哪里出错了,任何资源都会很棒。
【问题讨论】:
-
在我见过的所有生成器示例中,都涉及到 Promise。您的脚本基于哪些文档/帖子/howtos?
-
为什么不直接使用
fs.readFileSync? -
Why not simply use fs.readFileSync?阻塞了。这里的用例是让这条线非阻塞:github.com/bevry/ssg-experiments/blob/… -
In all generator examples I've seen were promises involved. On which docs/posts/howtos is your script based?没有具体的例子,因为没有什么是我所追求的,所以这只是我最好的猜测的混搭...... -
“同步”表示“阻塞”。我认为这是不可能的,请查看How to encapsulate async function calls into a sync function in Node.js or Javascript
标签: javascript node.js generator yield