Misha Kulakovsky
осталось придумать как это обойти, может cors-хедера какого-то нехватает
Misha Kulakovsky
нашел, output.crossOriginLoading: 'anonymous' в конфиг
Misha Kulakovsky
спасибо что выслушали
Misha Kulakovsky
ха, еще прикол: хендлер не отрабатывает если консоль открыта
Misha Kulakovsky
Ладно, посоветуйте тогда как решить проблему архитектурно:
контроллеры дергают методы класса Api, которые в свою очередь делают xhr, возвращая промис
некоторые контроллеры вешают на промис .catch и знают что делать в случае ошибки
некоторые контроллеры не знают что делать в случае ошибки и я хочу чтобы в таком случае приложение падало, выводя ошибку в окно браузера
я не могу триггерить падение в .catch внутри Api т.к. не знаю, будет ли или не будет прицеплен .catch в конструкторе
глобально ловить реджект как видите проблемно
что делать? вешать catch через setImmediate, чтобы он в конец списка попал чтоли?
hlomzik
hlomzik
не понимаю проблемы. chainable жи
Misha Kulakovsky
мне нужно чтобы логика в catch, который внутри, сработала только если не вешается catch снаружи
hlomzik
есть возможность посмотреть, что внутри апи? (описания обработки нет, как я понимаю).
если апи обрабатывает исключение и не пробрасывает его дальше по цепочке, то твой .catch не вызовется
Misha Kulakovsky
в том и проблема — апи не знает, надо ли пробрасывать или нет. зависит от логики в контроллере
Kanat
можете закоментить код ? Как все там работает и описать коментом?
Misha Kulakovsky
Вот такой абстрактный пример набросал, думаю с axios все знакомы. Суть в том что приложение должно падать на ошибках: 1) сохранение айтема, 2) получение айтема если это не 404-я ошибка
Misha Kulakovsky
(например сервер упал, т.е. 500-я)
Misha Kulakovsky
если же делаем getItem и нам приходит 404, мы падать не должны
Misha Kulakovsky
И да, в другом контроллере, скажем, может быть нормальным 410 ошибка, но 404 является фатальной. Пример абстрактный, в реальной же ситуации используются собственные ID ошибок.
Misha Kulakovsky
Ну а вопрос в том, как собственно определить isFatal
Дима
Мне сейчас честно лень вчитываться в твою проблему, но вообще это уже не промис
Дима
Это выглядит как место для middleware
Дима
Юзер вставляет свой обработчик и творит что ему там надо, если ошибку не перехватывает — она пролетает дальше в твой код
Sergey
Misha Kulakovsky
офигительные истории
Misha Kulakovsky
и как вы предлагаете это сделать?
Misha Kulakovsky
прокидывать в вызов Api колбек, как в старые добрые?
Misha Kulakovsky
я сформилирую еще проще: нужно ко всем промисам добавлять глобальный .catch() в конец цепи, как это сделать?
Дима
И промисами тогда не пользуйся, они же тоже заставляют кал бэк прокидывать
Misha Kulakovsky
это точно чат про js?
andrei
как пропатчить... кхм-кхм
Артём
Народ, какой сейчас фронтэнд стек технологий нужно знать чтобы комфортно чувствовать
Ale
главный девиз это "не тот, что вчера"
Артём
А то смотрю и куча всего
Артём
Всякие gulp bower npm и куча библиотек
Дима
Самое смешное, что всё перечисленное уже тоже устарело 😄
anoru
лол
anoru
Ну, npm все же нет. Yarn не очень
Дима
Ну так то да
Igor
setInterval(action(c1), 3); замени на
setInterval(function() { action(c1)} , 3);
Anonymous
Жуткая
\o \o
Михаил
Почитал, что такое реакт, оказывается такую штуку я сейчас пишу.
Ερμής
Ερμής
Сейчас бы писать на реакте и не знать что это реакт
anoru
О господи, ну в js чате хотя бы не напоминайте о шургиной, достало
Egor
Михаил
Ага, писать. Зачем брать готовое, если можно написать свое.
Артём
Ну и нафиг весь этот зоопарк из библиотек тогда. Пока одно освоишь выйдет другое и то что учил уже устарело
Артём
Вон java или c++ 20-30 лет без этой кучи и норм
Михаил
Ну так учить надо не библиотеки, а логику. Она никогда не устаревает и даже к языкам не привязана.
Артём
А это вот для чего bower gulp
Артём
Еще сасс лесс
Артём
И прочее
Артём
Разработку может и ускорит. Но пока освоишь весь этот набор, жизнь пройдет мима тебя
Артём
В поход с палаткой или лесс саасс учить ммм что же выбрать
Oleg
В лесу учить тоже можно
Артём
Там не до этого)
Михаил
Подскажите по SQL. Хочу сделать чат, того же формата как в телеграмме. На первый взгляд в таблице с сообщениями можно сделать один глобальный message_id, но не понятно, как тогда нормально получать часть сообщений, например с -20 до -10. Или только добавление message_chat_id - номер сообщения в чате решит проблему.
Артём
Всмысле чтобы при заходе в чать. Диалоги подгружались?
Misha Kulakovsky
тебе нужно добавить dialog_id
Артём
(кол-во сообщение, все сообещния) - N(кол-во сколько выводим в порции). Т.е всего сообщений 100, нужно выводить по 10, 100-10 = 90. Вот отсюда и выводи limit 90, 100, потом 50, 60 и тд
Misha Kulakovsky
зачем считать общее кол-во сообщений?
Артём
чтобы порциями точно выводить
Misha Kulakovsky
дба на вас нет...
Ivan
Ivan
кейс использованаия такой, что ты всегда подгружаешь последние, а потом скроллишься по истории. Для скроллинга у тебя есть маркер, от которого грузить.
Артём
причем здесь ид, подгуружать старые сообщения обычным лимитом
Артём
арфметикой указатель переносишь откуда начинать вывод и до куда
Misha Kulakovsky
table messages (id int, chat_id int, author varchar, message text);
открываешь чат — грузишь последнее
select * from messages where chat_id = :chatID order by id desc limit 100
подгружаешь более ранние, у клиента уже есть сообщения, из них берешь самый маленький ид:
select * from messages where chat_id = :chatID and id < :minMessageID order by id desc limit 100
Ivan
Select * from messages where messageId > $marker LIMIT N
Ivan
messageId < $marker
Михаил
Да, что-то я протупил, что можно взять WHERE от самого маленького id. Так и сделаю.
Артём
юзер зашел в чат, ему загрузились предыдущие сообщения. Запоминаем ид. То что далее напишут - не важно. Если он доскроллир до верха или нажал кнопку загрузить старые, от того id-10(порция) = x. и вывод limit x, id
Артём
id первого сообщения которое подгрузилось
Misha Kulakovsky
ты подразумеваешь что сообщения должны идти в хронолигческом порядке, и упускаешь более простой путь
Misha Kulakovsky
в моем примере видишь сортировка в обратном
Misha Kulakovsky
таким образом можно просто указывать лимит, без оффсета
Misha Kulakovsky
а развернуть порядок потом в приложении можно
Misha Kulakovsky
это намного производительнее, оффсет заставит базу бегать по диску гораздо больше чем нужно