Вместо написания вспомогательных методов, таких как fetch
, которые возвращают значение, заставьте их принять другую функцию, "приемник", чтобы передать их результат:
function fetch(receiver) {
$.getJSON("blah...", function(data) {
receiver(data);
});
}
Очевидно, что это избыточно, потому что именно так getJSON
уже работает, но в более реалистичном примере функция fetch
обработает или отфильтрует результат, прежде чем передать его.
Тогда вместо:
document.write(fetch());
Вы бы сделали:
fetch(function(result) { document.write(result); });
Генераторы могут использоваться для того, чтобы сделать асинхронный код более линейным по стилю. Каждый раз, когда вам нужен был какой-то асинхронный результат, вы вызываете функцию для его запуска, и генератор возобновляет работу, когда результат становится доступным. Там будет немного кода управления, поддерживающего работу генератора. Но это не очень помогает, потому что генераторы не являются стандартными для всех браузеров.
Если вам интересно, вот сообщение в блоге об использовании генераторов для исправления асинхронного кода .