Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / JavaScript генераторы. Вопрос. / 20 сообщений из 20, страница 1 из 1
08.02.2019, 11:50
    #39771026
sergnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript генераторы. Вопрос.
Подскажите где ошибаюсь
пишу (использую библиотеку co())

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
var f1 = function () {}	
var f2 = function () {}	
var f3 = function () {}	

function* generator () {
   yield f1();
   yield f2();
   yield f3();
};

co(generator);



исполняется только f1()

OK? тогда так, без co()

Код: javascript
1.
2.
3.
4.
	let generator = generateSequence();
	generator.next();
	generator.next();
	generator.next();



эффект тот же.
Я понимаю, что я что-то не понимаю. Но не понимаю что именно.
...
Рейтинг: 0 / 0
08.02.2019, 16:49
    #39771258
Лысый дядька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript генераторы. Вопрос.
...
Рейтинг: 0 / 0
08.02.2019, 21:56
    #39771404
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript генераторы. Вопрос.
Лысый дядька,

кто-то ещё на саблимке сидит )
...
Рейтинг: 0 / 0
08.02.2019, 22:12
    #39771410
Лысый дядька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript генераторы. Вопрос.
hVosttЛысый дядька,

кто-то ещё на саблимке сидит )
Неа, не сижу. :) Просто дома не работаю принципиально и поэтому установленных IDE под рукой нет, а сижу (и плотно) на линейке продуктов от JetBrains, куплен весь пакет тащемта.
...
Рейтинг: 0 / 0
08.02.2019, 23:18
    #39771433
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript генераторы. Вопрос.
Лысый дядькаа сижу (и плотно) на линейке продуктов от JetBrains, куплен весь пакет тащемта

лойс :)
аналогично
...
Рейтинг: 0 / 0
11.02.2019, 09:51
    #39772023
sergnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript генераторы. Вопрос.
Лысый дядька,
Спасибо, нашёл ошибку.
Но библиотека co() всё равно почему то неправильно работает. Может не там взял?
Вызывает только первую функцию. А при вызове последовательно методами next() всё нормально.
...
Рейтинг: 0 / 0
11.02.2019, 10:24
    #39772045
Лысый дядька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript генераторы. Вопрос.
sergnnНо библиотека co() всё равно почему то неправильно работает.
А что вообще вы хотите добиться? Я не увидет какого-то профита от использования этой тулзы, наоборот, она только запутывает и усложняет.
...
Рейтинг: 0 / 0
11.02.2019, 11:41
    #39772097
sergnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript генераторы. Вопрос.
Лысый дядька,

Есть блок в программе, где несколько действий должны выполняться последовательно (синхронно).
Но количество действий должно в последствии увеличиваться.
co() вроде как сама должна высчитать число вызовов метода next()
А так надо не забыть в случае дополнения добавить ещё вызов next().
Если забыть, то потом ошибку искать утомительно будет.
Тем более, что блок дописывать буду не только я.
...
Рейтинг: 0 / 0
11.02.2019, 11:48
    #39772105
Лысый дядька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript генераторы. Вопрос.
sergnnЛысый дядька,

Есть блок в программе, где несколько действий должны выполняться последовательно (синхронно).
Но количество действий должно в последствии увеличиваться.
co() вроде как сама должна высчитать число вызовов метода next()
А так надо не забыть в случае дополнения добавить ещё вызов next().
Если забыть, то потом ошибку искать утомительно будет.
Тем более, что блок дописывать буду не только я.

Честно говоря, не понял ничего. Каким образом co может вычислить количество вызовов метода next? Это в неё надо как-то передать? И чем это отличается от простого цикла со счетчиком?
...
Рейтинг: 0 / 0
11.02.2019, 13:05
    #39772178
sergnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript генераторы. Вопрос.
Лысый дядька,

описание работы с co() взято отсюда:
https://habr.com/ru/company/piter/blog/434360/

Может я что-то неправильно понял.
Не могу себя назвать крутым знатоком скрипта.
Основная моя стезя Java + SQL
...
Рейтинг: 0 / 0
11.02.2019, 13:29
    #39772198
Лысый дядька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript генераторы. Вопрос.
sergnnЛысый дядька,

описание работы с co() взято отсюда:
https://habr.com/ru/company/piter/blog/434360/

Может я что-то неправильно понял.
Не могу себя назвать крутым знатоком скрипта.
Основная моя стезя Java + SQL

Вы как-нибудь иначе сформируйте свою задачу. Она наверняка решается элементарно.
...
Рейтинг: 0 / 0
11.02.2019, 14:15
    #39772250
sergnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript генераторы. Вопрос.
Лысый дядька,

Ок.
Есть несколько функций, которые должны выполнятся последовательно.
Ибо выполнять или не выполнять следующую зависит от результата исполнения предыдущей.
А в функциях есть длительные операции вроде запроса данных с сервера или получения электронной подписи на клиенте.
Понятно, что это решается с помощью обратных вызовов, но если этих функций более нескольких штук,
то код становится просто жутко не читаемым. Тем более если нужно добавить ещё одно действие,
то вставлять дополнительный уровень обратных вызовов получается слишком уж коряво.
Вот с помощью генераторов это в принципе решается, но есть маленькая проблем описанная выше.
то есть при добавлении новой функции нужно не забыть добавить вызов метода генератора next().
Собственно не проблема, но хочется поэлегантнее.
...
Рейтинг: 0 / 0
11.02.2019, 14:46
    #39772275
Лысый дядька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript генераторы. Вопрос.
sergnnОк.
Есть несколько функций, которые должны выполнятся последовательно.
Ибо выполнять или не выполнять следующую зависит от результата исполнения предыдущей.
А в функциях есть длительные операции вроде запроса данных с сервера или получения электронной подписи на клиенте.
Понятно, что это решается с помощью обратных вызовов, но если этих функций более нескольких штук,
то код становится просто жутко не читаемым. Тем более если нужно добавить ещё одно действие,
то вставлять дополнительный уровень обратных вызовов получается слишком уж коряво.
Вот с помощью генераторов это в принципе решается, но есть маленькая проблем описанная выше.
то есть при добавлении новой функции нужно не забыть добавить вызов метода генератора next().
Собственно не проблема, но хочется поэлегантнее.

Ух!!!! Дык промисы же для этого самого и придуманы! Вы про генераторы знаете, а про промисы нет? Гуглите "ES6 Promise"
...
Рейтинг: 0 / 0
11.02.2019, 16:10
    #39772346
sergnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript генераторы. Вопрос.
Лысый дядька,
Дык ведь генераторы по сути промисы и возвращают.
По идее это развитие промисов.
...
Рейтинг: 0 / 0
11.02.2019, 16:27
    #39772367
Лысый дядька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript генераторы. Вопрос.
sergnnЛысый дядька,
Дык ведь генераторы по сути промисы и возвращают.
По идее это развитие промисов.
В вашей задаче вы боитесь (и справедливо) ада коллбэков. Промисы решают этот вопрос цепочкой then-вызовов, при чем тут генераторы? Вы хотите последовательно вызвать несколько асинхронных функций, одна после завершения другой, это делается вот так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
firstThingAsync()  
  .then(function(result1) {
      return new Promise((resolve, reject) => {
          $.getJSON(url)
         .done((json) => resolve(json))
         .fail((xhr, status, err) => reject(status + err.message));
  });
  })
  .then(function(results) {
      return new Promise((resolve, reject) => {
          $.getJSON(url2)
          .done((json) => resolve(json))
         .fail((xhr, status, err) => reject(status + err.message));
  });
  })
    return new Promise((resolve, reject) => {
    $.getJSON(url3)
      .done((json) => resolve(json))
      .fail((xhr, status, err) => reject(status + err.message));
  });
  .catch(function(err){ /* ... */ });
...
Рейтинг: 0 / 0
11.02.2019, 17:26
    #39772420
sergnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript генераторы. Вопрос.
Лысый дядька,

Спасибо, посмотрю.
...
Рейтинг: 0 / 0
13.02.2019, 09:58
    #39773180
sergnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript генераторы. Вопрос.
Лысый дядька,

И всё таки с генераторами код мне кажется более читаемым.
Хотя конечно дело вкуса и привычки.
...
Рейтинг: 0 / 0
13.02.2019, 11:56
    #39773257
Лысый дядька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript генераторы. Вопрос.
sergnnИ всё таки с генераторами код мне кажется более читаемым.
Хотя конечно дело вкуса и привычки.
Читаемый код получается с async/await
...
Рейтинг: 0 / 0
15.02.2019, 11:59
    #39774365
sergnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript генераторы. Вопрос.
Лысый дядька,
использование библиотеки со()
приводит вариант с генераторами почти к виду async/await
только вот почему то не работает зараза.

Кстати для использования async/await нужно тоже доп. библиотеку грузить?
...
Рейтинг: 0 / 0
15.02.2019, 19:07
    #39774740
Vladimir A
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript генераторы. Вопрос.
sergnn,
have a look saga
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / JavaScript генераторы. Вопрос. / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]