【发布时间】:2014-04-24 23:42:00
【问题描述】:
一段时间以来,我一直对 Node JS 感到非常兴奋。我最终决定埋头苦干,编写一个测试项目来了解最新的 Harmony 版本的 Node 中的生成器。
这是我非常简单的测试项目:
https://github.com/kirkouimet/project-node
要运行我的测试项目,您可以轻松地从 Github 拉取文件,然后运行它:
node --harmony App.js
这是我的问题 - 我似乎无法让 Node 的异步 fs.readdir 方法与生成器内联运行。其他项目,例如 Galaxy 和 suspend 似乎能够做到。
这是我需要修复的代码块。我希望能够实例化 FileSystem 类型的对象并在其上调用 .list() 方法:
FileSystem = Class.extend({
construct: function() {
this.currentDirectory = null;
},
list: function*(path) {
var list = yield NodeFileSystem.readdir(path);
return list;
}
});
我需要提前做一些事情来将 Node 的 fs.readdir 转换为生成器吗?
一个重要的注意事项,我正在解析所有创建的类函数。这让我能够以不同于普通函数的方式处理生成器函数:
我真的被这个项目难住了。希望得到任何帮助!
这是我想要完成的:
- 大量使用类,修改版本的 John Resig 的 JavaScript 类支持继承
- 使用生成器获得对 Node 的股票异步调用的内联支持
编辑
我已尝试实现您的示例函数,但遇到了一些麻烦。
list: function*(path) {
var list = null;
var whatDoesCoReturn = co(function*() {
list = yield readdir(path);
console.log(list); // This shows an array of files (good!)
return list; // Just my guess that co should get this back, it doesn't
})();
console.log(whatDoesCoReturn); // This returns undefined (sad times)
// I need to use `list` right here
return list; // This returns as null
}
【问题讨论】:
-
您可以尝试缩减您的示例并将其包含在问题中吗?您拥有的类逻辑与应用生成器无关,虽然我有建议,但现在很难给出答案。通常,如果代码太大而无法放入您的问题正文中,那么答案对于您以外的任何人都没有帮助。
-
@loganfsmyth 我继续更新我的问题以包含相关代码。谢谢!
-
@KirkOuimet 你的test project url 坏了。
标签: javascript node.js asynchronous generator ecmascript-6