Size: a a a

JavaScript.Ninja

2020 June 29

IK

Illya Klymov in JavaScript.Ninja
N P
Спасибо, не знал
Это разные вещи
источник

IK

Illya Klymov in JavaScript.Ninja
Без заезды это default export, со звездой все экспорты
источник

EN

El Nasurov in JavaScript.Ninja
Всем привет!

Некоторое кол-во времени уже мучаюсь с механизмом обработки выхода из учетки на сайте, был бы рад любому фидбеку.

Есть функция logOut, которая вызывается при клике на "Выйти". В ней нужно:
- отправить запрос на /logout, чтобы сессия удалилась
-  почистить клиентские данные (локалСтор, стейт и тд)
- и соответственно сделать location.assign на adfs сервис, который занимается авторизацией.

Хотелось бы, чтобы выход из учетки происходил моментально, а не дожидаясь ответа от запроса на удаление сессии (запрос - /logout). То есть запрос на /logout послать нужно, но дожидаться его ответа не обязательно (если запрос будет успешным, то все ок - сессия удалилась, если нет - ну так уж быть, "потерянная" сессия останется на бэке).

Проблема в том, что, как я себе предполагаю, интерпретатор выполняя данную функцию,  на 7й строчку должен моментально отправить запрос и собственно продолжить выполнение этой функции. Однако я такого не наблюдаю: у меня стоит брекпоинт на  Axios.interceptors.request (последняя функция которая вызывается перед отправкой запроса) и я вижу, что код доходит до данного брекпоинта только после выполнения всей функции logOut..

Я не понимаю, почему так происходит.. (Если вышесказанное верно, есть предположения, что это axios внутри себя делает так, что все запросы отправляются исключительно после выполнения синхронного кода функции, в которой она была вызвана, или же, возможно, такие ограничения накладывают интерцепторы)
источник

EN

El Nasurov in JavaScript.Ninja
Сама функция logOut
источник

IK

Illya Klymov in JavaScript.Ninja
El Nasurov
Сама функция logOut
В js единица синхронизации эвент лупа функция. Это значит что ничего что висит в эвент лупе не будет выполняться пока не закончится текущая функция. Готов поспорить что аксиос планирует интерсепторы в следующем тике, так что все ок.

К сожалению, ваша идея опасно неработоспособна. Когда вы уйдете на другую страницу, браузер убьет все pending запросы, поэтому нельзя быть уверенным, что запрос выполнится
источник

EN

El Nasurov in JavaScript.Ninja
Соответственно, единственные корректным решением остается дожидаться ответа от бэка на запрос /logout и уже потом выполнять оставшуюся логику ?

Или же возможные иные сценарии реализации?
источник

IK

Illya Klymov in JavaScript.Ninja
Мне кажется что это можно решить service worker
источник

EN

El Nasurov in JavaScript.Ninja
Спасибо, service worker - круто.

Как я понял, вся проблема в том, что аксиос планирует интерсепторы в следующем тике, который выполнится уже после выполнения всей функции logOut.

В таком случае, имеет ли место быть следующая реализация: отправлять запрос /logout не модифицированным объектом аксиоса (где настроены интерцепторы и тд), а обычным аксиосом из коробки, где интерсепторы не определены (собственно, и нечего планировать в след. тик) ?

Или же тут не играет роль - определены интерсепторы или нет, все равно запрос будет вызываться лишь после выполнения всего синхронного кода функции из которой он был вызван ?
источник

IK

Illya Klymov in JavaScript.Ninja
El Nasurov
Спасибо, service worker - круто.

Как я понял, вся проблема в том, что аксиос планирует интерсепторы в следующем тике, который выполнится уже после выполнения всей функции logOut.

В таком случае, имеет ли место быть следующая реализация: отправлять запрос /logout не модифицированным объектом аксиоса (где настроены интерцепторы и тд), а обычным аксиосом из коробки, где интерсепторы не определены (собственно, и нечего планировать в след. тик) ?

Или же тут не играет роль - определены интерсепторы или нет, все равно запрос будет вызываться лишь после выполнения всего синхронного кода функции из которой он был вызван ?
нет, потому что запрос это асинхронная операция
источник

IK

Illya Klymov in JavaScript.Ninja
в любом случае
источник

EN

El Nasurov in JavaScript.Ninja
Понял, огромное спасибо!
источник

V

Valentin in JavaScript.Ninja
Возможно поставить брекпоинт на инлайновый жс в штмл? Или только явно написать дебаг? Или как отследить в каком файле описана логика некой функции вызванной на штмл
источник

D

Dimitrii in JavaScript.Ninja
Valentin
Возможно поставить брекпоинт на инлайновый жс в штмл? Или только явно написать дебаг? Или как отследить в каком файле описана логика некой функции вызванной на штмл
Хром, вкладка исходники, найди там свой хтмл, ставь бряку
источник

V

Valentin in JavaScript.Ninja
Dimitrii
Хром, вкладка исходники, найди там свой хтмл, ставь бряку
Только так?
источник

D

Dimitrii in JavaScript.Ninja
debugger;
источник

NP

N P in JavaScript.Ninja
Можно ли вставить React - компонент в Dom? Если можно, то каким образом? Вот так у меня не вышло)
источник

IK

Illya Klymov in JavaScript.Ninja
N P
Можно ли вставить React - компонент в Dom? Если можно, то каким образом? Вот так у меня не вышло)
ReactDom.render
источник

NP

N P in JavaScript.Ninja
Illya Klymov
ReactDom.render
Получилось, спасибо) А в гугле решение не нашлось, забавно)
источник

v

vasilich in JavaScript.Ninja
N P
Получилось, спасибо) А в гугле решение не нашлось, забавно)
Первой ссылкой по запросу «insert react component into html»
При этом после «insert react» google остальную часть автодополняет)
источник

v

vasilich in JavaScript.Ninja
N P
Получилось, спасибо) А в гугле решение не нашлось, забавно)
По какому запросу гуглил?
источник