Понимание узлов JS-генераторов с модулем fs

1112 Некоторое время я был в восторге от Node JS. В конце концов я решил собраться и написать тестовый проект, чтобы узнать о генераторах в последней сборке Node Harmony.

Вот мой очень простой тестовый проект:

https://github.com/kirkouimet/project-node

Чтобы запустить мой тестовый проект, вы можете легко извлеките файлы из Github, а затем запустите его с помощью:

node --harmony App.js

Вот моя проблема - я не могу заставить асинхронный метод Node fs.readdir работать в потоке с генераторами. Другие проекты, такие как Galaxy и suspend , похоже, способны это сделать.

Вот блок кода, который мне нужно исправить. Я хочу иметь возможность создать экземпляр объекта типа FileSystem и вызвать для него метод .list ():

https://github.com/kirkouimet/project-node/blob/4c77294f42da9e078775bb84c763d4c60f21e1cc/ FileSystem.js # L7-L11

FileSystem = Class.extend({

    construct: function() {
        this.currentDirectory = null;
    },

    list: function*(path) {
        var list = yield NodeFileSystem.readdir(path);

        return list;
    }

});

Нужно ли что-то делать заранее, чтобы преобразовать fs.readdir узла в генератор?

Одно важное замечание, я Разбор всех функций класса по мере их создания. Это позволяет мне обрабатывать функции генератора иначе, чем обычные функции:

https://github.com/kirkouimet/project-node/blob/4c77294f42da9e078775bb84c763d4c60f21e1cc/Class.js#L31-L51

Я был действительно озадачен этим проектом. Буду рад любой помощи!

Вот что я пытаюсь сделать:

  1. Интенсивное использование классов с модифицированной версией поддержки классов JavaScript Джона Резига с наследованием
  2. Использование генераторов для получения встроенной поддержки стандартных асинхронных вызовов 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
}

8
задан Charles 24 March 2014 в 04:53
поделиться