artalog
Развернутые ответы на вопросы в чатах, мысли от рабочих процессов. Вопросы - @artalar.
Show more- Subscribers
- Post coverage
- ER - engagement ratio
Data loading in progress...
Data loading in progress...
Error
) для наличия колстака и упрощения дебага.
Проблема в том что AbortController
стандартизировали, AbortSignal
стандартизировали и затащили оба и во все браузеры и в серверные среды исполнения. Но AbortError
не стандартизировали, потому что нет такого.
Исторически сложилось, что ошибки отмены браузер выбрасывает как new DOMException(message, "AbortError")
. И при стандартизации менять это на новый AbortError
не хотели из-за обратной совместимости. И серверные среды не хотели к себе тащить DOMException
по понятной причине (хотя в ноде DOMException доступен, лол, но это костыли).
С DOMException еще проблема в том что он вторым аргументом принимает свойство "name", тогда как недавний апдейт спеки подарил нам error cause и теперь все этоо наследние не совместимо.
Я в реатоме использую такой хелпер, и всегда аборт вызываю так: controller.abort(toAbortError('unmount'))
(кстати, можете импортировать себе, все тришейкается)@reatom/[email protected]
в reatomComponent появилась поддержка use и useAtomPromise.
В теории выглядит круто - данные от эффектов не надо сохранять в отдельный стейт. Но типов для use
пока не подвезли, да и вообще он пока доступен только в canary версии реакта.throw promise
. Начал тыкать 19 версию для поддержки use - так оно выбрасывает Error
! Причем, у них есть симбол Suspens
для внутренних нужд, но в эту ошибку они его не асайнят, поэтому сейчас проверка на саспенс выглядит так:
const isSuspense = (thing: unknown) =>
thing instanceof Promise || (thing instanceof Error && thing.message.startsWith('Suspense Exception'))
Для меня этот код выглядит не надежным. Особенно тревожит то что алгебраические эффекты статически никак не типизируются, в отличии от окамла из которого они были взяты. И если проверка в кетче на Promise ещё достаточно однозначна, то парсит message (а они даже name не меняют) - просто надежда на все хорошее.
Если кто-то знает детали и способы лучше - поделитесь, пожалуйста. Текущее решение очень не удобно для авторов библиотек, реакт опять вставляет нам сваи в колёса ☹️Always prefer using Locators and web assertions over ElementHandles because latter are inherently racy.ДА ТЫЧТО??? Речь о Playwrite. Вот вам кейс, когда происходит в точности наоборот. Важно понимать, что локатор - это как css селектор, при каждом обращении к нему вызывается заного. Лично я это каждый раз забываю... Если вы накидали какой-то локатор - вы описали селектор который будет потом использоваться при вызове соответствующих операций, но вы не получили элемент! Извините что звучу как Кэп, но я постоянно об этом забываю, да и утренний тред в чате намекает, что люди тоже не особо наровят это помнить и проверять. Так вот, кейс когда это может выстрелить в ногу. Есть список элементов, вам нужно удалить их все по очереди. Вы селектите карточку элемента и получаете все элементы, берете
first
или last
, не важно, получаете targetLocator
и прокликиваете на нем удаление.
А дальше, я полагаю логично, вы хотите targetLocator.waitFor({state: 'detached'})
. И получаете плавующую багу, если элементов много - ожидаение падает с таймаутом, а если в списке всего один элемент - все идет нормально.
Уже поняли проблему?
Локатор при проверке видимости элемента каждый раз заного ищет целевой элемент в списке и после удаления одного, простоо находит другой, если их несколько.
Я долго тупил над этим🥲
В данном кейсе вместо локатора лучше использовать реальный элемент (через elementHandle
).
Я для себя понял что так надо делать когда работа предстоит с динамическим набором элементов (для меня частый кейс).
Жаль только, у него апишка не консистентная с локатором. Например, вместо targetLocator.waitFor({state: 'detached'})
нужно будет написать targetElement.waitForElementState('hidden')
.Ближайшая конференция — Joker 2024, 9 октября (Online), 15–16 октября (Санкт-Петербург + трансляция). Подробности и билеты:
https://jrg.su/Ypf1HW— — . . . . Представьте себе, что вы — дежурный милиционер в турникетном зале. Безбилетники пытаются прыгать через турникеты, вы их ловите. Вы один, их — много. Возможно ли им задать такие «правила игры», чтобы они не смели пытаться перепрыгивать, даже если заранее известно, что поймаете вы в любом случае только одного из них? Оказывается, возможно. Но не очень тривиально. Подобные схемы борьбы с массовыми нарушениями могут применяться (и применяются в некоторых странах) при борьбе с налогоуклонением, списыванием на экзаменах, взяточничеством и т.д. Доклад о математике и теоретико-игровых основаниях, которые стоят за изобретением различных хитроумных алгоритмов контроля. На этом докладе вы не получите академического образования, вы не научитесь писать более эффективные алгоритмы. Однако вы получите представление о том, насколько богатый математический аппарат существует. Если вам интересна теория игр, если вам интересно узнать об исследованиях, за которые уже несколько раз присуждали премию Нобелевского комитета по экономике, то добро пожаловать на доклад.
Your current plan allows analytics for only 5 channels. To get more, please choose a different plan.