Once this is done and your steps correctly target some DOM elements of your application, you can start the tour by calling the following method.
this.$tours['myTour'].start()
const build = gulp.series(clean, gulp.parallel(html, css, js, images));
const watch = gulp.series(build, browserSync, watchFiles); // запустить в серии и watch последний, так как он не завершается.
если Вы действительно знаете как безошибочно верстать структурно
клонирование унифицированного блока через копирование его html-разметки и абсолютно без доп.правки любых стилей)
создать публичный инструмент для быстрой вёрстки любых макетов
Готовы ли Вы лично потратить время вместе со мной и без оплаты труда, чтобы вместе добиться результата, обеспечивающего быструю автоматическую вёрстку любого блочного макета на основе простого изображения desktop-страницы? И, поясните: почему?
Ошибку, которая произойдёт в коде, запланированном «на будущее», например в setTimeout, try..catch не поймает...
На момент запуска функции, назначенной через setTimeout, этот код уже завершится, интерпретатор выйдет из блока try..catch.
Чтобы поймать ошибку внутри функции из setTimeout, и try..catch должен быть в той же функции.
Проверьте что приходить в listdata и нет ли пересечений с cat_items.
Задача - сделать так, чтобы все id в cat_items_sorted (соответственно в cat_items) были разными.
Можно конечно в лоб решить, поменять ключ на индекс:
Но подозреваю что дубли товаров вам в списке не нужны.