Обновить
1

Пользователь

1
Подписчики
Отправить сообщение
Она то переносит, но принимать решение все равно придется и для данного вопроса это не важно где, важно что мы не избавились от условных операторов. Как принимать решение о параметризации контекста той или иной стартегией вообще выходит за рамки этого паттерна. Ну ок, единственный способ, который я в данный момент вижу — это сделать хэш таблицу в которой значения — это стратегии, тогда правда можно. Но опять таки ж это не заслуга паттерна стратегия, можно в качестве значения хэш таблицы задать и функцию в конце-концов, так что.
Мне интересно, почему по ссылке на рефакторин гуру статья называется «заменяйте условные операторы полиморфизмом» предлагают использовать для этого паттерн стратегию, хотя он для этого не предназначен. Паттерн состояние — да, а стратегия — нет. И в приведенном там примере в итоге так и не избавились от условных операторов, так как все равно там придется их применить в месте где будем решать какой из классов стратегии использовать.
Все же вcе субъективно и не однозначно. Само наличие большого количества мелких функций в коде точно так же начинает ухудшать его читабельность как и одна мегафункция. Когда у тебя в файле, вместо 10 функций по 20 строк, 100 функций по 2 сторки, начинаются труднсти. В данном примере не видно, так как он мал сам по себе и такое преобразование, кажется, вполне логично улучшает его читабельность. Но в кодовой базе куда больше все уже не так однозначно становится. Вот, например, немножко другой взляд на вещи:
habrahabr.ru/company/nixsolutions/blog/341034
А, теперь понятно. Хорошо бы описание колонок таблицы указать, так как я подумал, что заголовок колонки — это номер ловушки, а значение — количество насекомых внутри.
Я чего-то не понимаю или как среднее арифметическое из выборки: 10, 9, 5, 5, 1, 2, 1 может быть 1.636364? Ведь (10+9+5+5+1+2+1) / 7 = 4.714
Эти цепочки промисов тяжело тестировать, отлаживать, код получается не особенно вразумительным. Часто бывает так, что просто глядя на код тяжело понять даже то, в каком порядке выполняются задачи и подзадачи.


async/await через babel еще 2 года назад уже отлично работали
А вы планируете добавлять Database Tools в WebStorm? А то странно получается, что прям на главной странице в описании вы WebStorm позиционируете как инструмент для разработки на node.js, а фунционал работы с базой добавлять не спешите. Хотя в других модификациях IntelliJ IDEA это давно есть…
Вот по поводу генераторов — как то не нашел для себя полезного применения им в повседневных задачах…
Да, выше уже мне указали на мой промах. Я почему-то подзабыл, что вызов асинхронной фунции не только возвращает промис, но и запускает выполнение самой функции.
Согласен, забыл про этот момент.
Вот если бы синтаксис был примерно такой:
async function add1(x) {
  var a = resolveAfter2Seconds(20);
  var b = resolveAfter2Seconds(30);
  return await(x + a + b);
}

Вот тогда бы я согласился с Вами, что можно догадаться :)
Для меня не очевидно потому что await означает, что мы ждем окончания асинхронной операции при его наличии. И логично что, если два await явно указано, то и ожидание должно происходить два раза. А чтобы дождаться нескольких результатов асинхронных функций как бы существует Pormise.all(). Он как раз явно и указывает на этот процесс.
Понятно, что во втором примере с использованием Promise.all() больше кода получится. Но с другой стороны, во втором примере на параллельность получения результатов указывает только то, что await'ы находятся в выражении, которое возвращается из aync функции и больше ничего. Такое легко забыть, пропусть… короче не очевидно как по мне.
Да я, в принципе, сразу так и понял, так как это единственная разумная причина такое добавлять. Но что-то внутри меня перевернулось)
Куда менее прятный вот такой момент я нашел в документации мозиллы по поводу AsyncFunction:

Выполнится за 4 секунды, как и ожидаемо.
async function add2(x) {
  var a = await resolveAfter2Seconds(20);
  var b = await resolveAfter2Seconds(30);
  return x + a + b;
}


А вот этот кусок кода выполнится за 2 секунды. Как по мне, вообще не очевидно, не смотря на то, что может оказаться вполне удобным для использования.
async function add1(x) {
  var a = resolveAfter2Seconds(20);
  var b = resolveAfter2Seconds(30);
  return x + await a + await b;
}
Лишние запятые в списке параметров функции и вызове

WTF…
Согласен, условие по поводу асинхронности вывода сформулировано двояко, я тоже так понял.

Информация

В рейтинге
Не участвует
Откуда
Украина
Зарегистрирован
Активность