leni_m: в вашем случае catch работает, но обработчика для исключений нет.
Можно его добавить:
Вместо этих надписей можно сделать что угодно: показать пользователью картинку с котиками или попытаться получить курс валют из другого источника. В этом вся фишка: не просто сдохнуть от ошибки, а попытаться ее исправить.
leni_m: Да нет в вашем примере никакого исключения. Некоторые числа делятся на 2 без остатка, и в этом нет ничего исключительного. Это все четные числа, есличо.
Если вы хотите сами выбросить исключение, то
if ($x % 2 === 0) {
throw new Exception('мне не нравятся четные числа');
}
leni_m: Это конструкция для обработки исключений. Если вы впервые слышите слово "исключения", (а похже, что так и есть), то кратким описанием не отделаешься, а переписывать сюда пару страниц текста намного ленивее, чем дать ссылку.
И да, никто не говорил что будет легко. Легко - это первый способ. Или вон как zRrr советует - все предупреждения - под ковер.
akdes: Можно сделать так: https://jsfiddle.net/pqyra2vL/
setInterval, который раз в секунду уменьшает оставшуюся задержку и проверяет, не пора ли сменить кадр.
akdes: Ну и отлично же. Первые два блока будут показаны на пятой секунде, последний - на седьмой.
Но если вас все еще что-то не устраивает, то напишите наконец чего вы хотите. Словами, блин напишите, кодом у вас не получается же.
akdes: и конечно же вы поленились загуглить что такое "дырявые абстракции".
В том-то и дело, что в попытке упростить вы перестарались. В результате вы получаете правильные ответы на те вопросы, которые вы задали. Но вам они не подходят, потому что не решают вашу проблему. А проблему они не решают потому, что вы ее не описали. Замкунутый круг.
Это одна из основных причин, по которым процент решенных вопросов такой низкий.
На stackoverflow этот вопрос заминусовали бы. Затем вы бы либо обиженно ушли, либо задались вопросом "эй, а почему меня минусуют" и исправили бы вопрос (или задали новый). Но тостер, сцуко, толерантный. На нем можно только нажимать "мне нравится", а минусовать нельзя.
И мне не обязательно знать концепцию или смысл софта. Вопрос нормально постройте, скажите чего вы хотите добиться.
akdes: так и должно быть, потому что так работает setTimeout - вы практически одновременно запускаете два таймера и оба с задержкой 2 секунды. По истечении этих двух секунд они и срабатывают.
А вы все еще не описали чего вы хотите добиться и где здесь асинхронность.
Пример в фиддле работает вот почему: i.imgur.com/bAmFkvr.png
olezhenka: а зачем самодельная рекурсия, если есть setTimeout, который еще и точнее время выдерживает? К тому-же вопрос совсем не о том, как дергать таймеры а о async. Просто он сформулирован туманно и непонятно чего автор хочет добиться. Скорее всего он просто пытается понять зачем этот sync, но придумал неудачный синтетический пример.
И название канала никак не влияет на его работу.