John
Dmitry
видел кто нибудь слайдер на сайте mountaindew (тот что внизу)? вопрос: есть ли пример реализации такого слайдера?
refreak
Товарищи, при быстром клики по кнопка слайдера, сам слайдер зависает. Это нормальное явление на быстрые клики или нет?
Dmitry
отрыл у них на сайте исходник скрипта, так там 27к строк, и скрипт в себе содержит все что только можно, и код сайта, и библиотеки
Dmitry Kichev
ребя накидайте пожалуйста годных тулзов для дебага ангуляр 1.5 приложения, особенно важно – это момент начальной загрузки, то есть генерация html.. тут что-то не понимаю как вообще дебагать..
Rafael 🌵
@ZeroBias
Michael
Доброе утро. Пожскажите, есть ли какая-то тулза, которая покажет в выполняемом в браузере коде, где есть возможные потери производительности. А то код большой и вдруг что-то пропустил...
Igor
Девтулзы хрома. Есть вкладка performance.
👨🏼💻
Anatoly
в хроме 60 сильно улучшили эту утилиту
Ruslan
Всем привет, попробовал впервые async await на ноде, все получилось, но есть пара вопросов, чтобы до конца разобраться с этим, подскажете?
1. Фактически это тот же самый промис,
но вместо
someFunction().then(function(resp){
// actions with resp
})
мы пишем
async function foo() {
var resp = await (someFunction())
// actions with resp
}
А функция выглядит одинаково в обоих случаях
function someFunction() {
return new Promise(function (resolve, reject) {
connection.query('SELECT * FROM categories', function(err, rows, fields) {
if (err) throw err;
resolve(rows);
});
});
}
Верно? Т.е. просто более удобный синтаксис получения объектов промисов и передачи их в следующие функции?
2. Как мне сразу вызвать эту функцию foo() ?
Промисы сами по себе вызываются
А я делаю вот так
async function foo() {
var resp = await (someFunction())
// actions with resp
}
foo()
Какой есть способ не писать foo(), а чтобы функция сразу была вызвана?
async function will always return a promise and await operator gives us the opportunity to wait for a promise within the function
Ruslan
С async/await всё просто: подставляешь к функции async и она всегда будет возвращать промис, а await просто позволяет ожидать выполнения промисов внутри этой функции
Ruslan
А если у тебя функции с коллбэками, то тебе нужно их промифицировать. Для этого есть util.promisify. Если нужно промифицировать все методы в объекте, то юзай либы типа doasync или pify
Smooth Operator
или начни уже использовать реактивное программирование
Michail
Вопрос как сделать красивее - есть 2 объекта, один или оба могут быть пустыми. Поля, если есть объектов - массивы. Надо собрать в объект один все из содержимое, если есть
Michail
Что то вроде zip для объектов
Michail
Что за странный setup - так было написано до меня, это трогать не могу
Ruslan
Содержимое чего? массивов?
Michail
Содержимое объектов, да массивы на каждом ключе собрать в один
Michail
Гений) массивы перезапишутся
Ruslan
Это ты поздно уточнил
Michail
Это ты пишешь быстрее чем думаешь 😂
Michail
Я лучше ничего не придумал чем сложить список нужных полей отдельно и проходить по объектам и спрашивать есть ли там чо и если да - concat
Rafael 🌵
Есть же либка deepmerge
Костя
Писец как это тяжело читать
Костя
Можно же хоть иногда знаки препинания ставить?
Michail
Можно, обычно ставлю, тут что то
Michail
Есть же либка deepmerge
Как идея ок, но я очень очень не хочу в существующую кодбазу подключать либо только из-за этого
Rafael 🌵
Rafael 🌵
Michail
Дело не в весе, а introducing extra dependancy, проект и так гигантский легаси
Michail
Вобщем vanilla implementation
Rafael 🌵
Ну и зря ограничиваешь себя
Michail
😂
Rafael 🌵
Надо вести развязный образ жизни
Rafael 🌵
Ну серьезно, 1кб это ни о чем разговор
Rafael 🌵
Особенно если есть сборщик или юзаете http2
Igor
Да хорош, это же просто рекурсивный for
Michail
Да хорош, это же просто рекурсивный for
Ну я так и сделал примерно. Просто выглядит массивно для простой задачи которую решает. Вот и пишу в поисках тез кто на codewars в одну строку такое делает 😀
Ruslan
Smooth Operator
Ruslan
Ага, но для наглядности вот тебе:
const obj1 = {
reh: [12412,214,24,214,2,4,21],
hr: [346,346,436,1],
}
const obj2 = {
reh: [547547,547,547],
hr: [4745,457,45,7,45,7,5],
rg: [346,347]
}
function fn(obj1, obj2){
return [...new Set([
...Object.keys(obj1),
...Object.keys(obj2)
])].reduce((result, key) => {
result[key] = [
...new Set([...obj1[key] || [],
...obj2[key] || []])
];
return result;
}, {});
}
fn(obj1, obj2)
Ruslan
Можно в консольку скопипастить
Smooth Operator
Почему deep
Ruslan
на один уровень в глубь
Smooth Operator
это не deep :D
Ruslan
исправил на fn, это @mkuznetcov пусть выбирает имя
Rafael 🌵
Ага, но для наглядности вот тебе:
const obj1 = {
reh: [12412,214,24,214,2,4,21],
hr: [346,346,436,1],
}
const obj2 = {
reh: [547547,547,547],
hr: [4745,457,45,7,45,7,5],
rg: [346,347]
}
function fn(obj1, obj2){
return [...new Set([
...Object.keys(obj1),
...Object.keys(obj2)
])].reduce((result, key) => {
result[key] = [
...new Set([...obj1[key] || [],
...obj2[key] || []])
];
return result;
}, {});
}
fn(obj1, obj2)
И вот это не работает если в массивах будет: даты, строчки, объекты
Michail
В массива строки
Ruslan
refreak
Товарищи, выручайте. Зависает слайдер при быстро клики по его кнопкам. Как исправить?
Michail
Sergey
refreak
Откуда надо
Sergey
Откуда надо
Голову прочисти. И допри уже.
Что НИКТО НЕ ЗНАЕТ!
refreak
Жаль
Nikita
Ruslan
refreak
спасибо
Sergey
🤦♂
Sergey
Если зависает, значит косяк в коде
Ruslan
Ну может у него при быстроклике несколько раз функция отрабатывает, а код ok
Sergey
Ну
Sergey
Зависать от этого не должно
Sergey
Должно быстро быстро двигать
CherryTea
Ruslan
Там же скрипт third_party.js, так что ответственность снята)
CherryTea
да не, у них что то с бэком отечающим за пользовательские карты
CherryTea
Ruslan
https://refactoring.guru/ru/refactoring/catalog
John
John
Smooth Operator
Ruslan
Можно просто версию зафиксировать, если очко жмёт
Ruslan
Просто у меня тоже был этот дурацкий страх - сильно замедляет разработку
Michail
Ruslan
Разве вы не на сервере всё пишете, а потом собираете билд и деплоите на фронт?