Генераторы Javascript: Понимание их

Я уверен, что мое понимание генераторов по своей сути нарушено. Все онлайн-ресурсы кажутся конфликтующими, и это делает процесс обучения невероятно сложным и запутанным.

Из того, что я понимаю,yield Ключевое слово позволяет блоку кода, который выполняется в данный момент,ждать значения вместо того, чтобы бросать оставшийся код для выполнения внутри обратного вызова. Итак, как указывало большинство уроков, вы можете использовать это:

(function *() {
     // Wait until users have be got and put into value of `results`
     var results = yield db.get("users");
     // And continue
     view.display(results);
})();

Вместо:

db.get("user", function(results) {
    view.display(results);
});

Правильно, этоВсе хорошо, пока я не попытаюсь написать свои собственные генераторы. Я'мы столкнулись с несколькими заминками:

Первый пример кода, который я выше, не будет работать, потому что нечего перебирать генератор, правильно? Некоторое высшее существо должно назвать.next где-то, верно?Весь API должен быть переписан вплоть до вызовов ввода / вывода для поддержки генераторов, верно?Из того, что я собираю,yield кажется, стоит заждать значения наиболее общие случаи использования, тогда как в части реализации (читай: возвращаем значение в / inside)db.getyield кажется, стоит заотправить это значение обратно в текущий ожидающий блок, чтобы возобновить выполнение.

Взять, к примеру:

function *fn() {
    yield 1;
    yield "a";
}

var gen = fn();
gen.next(); // 1
gen.next(); // "a";

yield в этом контексте отправка значений обратно вниз вместо ожидания результатов. В первом примере, приведенном выше, он ожидает результатов отdb.get и возобновляет выполнение вместо "возвращение» или отправив обратно значение. Еслиdb.get Случай верен, это не по своей сути синхронно? Я имею в виду, неТ точно так же, как:

(function() {
     //Wait for the results
    var results = fs.readFileSync("users.txt");
    // Use results
    view.display(results);
})();

К сожалению, если этоЛюбой способ ясно из этого вопроса (вероятно, единственное ясное) состоит в том, что я нене понимаю генераторов. Надеюсь, я мог бы получить некоторое представление здесь.

Ответы на вопрос(3)

Ваш ответ на вопрос