1112 Некоторое время я был в восторге от Node JS. В конце концов я решил собраться и написать тестовый проект, чтобы узнать о генераторах в последней сборке Node Harmony.
Вот мой очень простой тестовый проект:
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;
}
});
Нужно ли что-то делать заранее, чтобы преобразовать fs.readdir узла в генератор?
Одно важное замечание, я Разбор всех функций класса по мере их создания. Это позволяет мне обрабатывать функции генератора иначе, чем обычные функции:
Я был действительно озадачен этим проектом. Буду рад любой помощи!
Вот что я пытаюсь сделать:
Я попытался реализовать вашу примерную функцию и столкнулся с некоторыми проблемами.
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
}