Size: a a a

Angular - русскоговорящее сообщество

2019 September 27

AM

Andrey Mokeev in Angular - русскоговорящее сообщество
как же хочется высказать своё ФЕ автору :)

в статье ни слова про реальный Cancellation token, а только сплошные костыли :)
источник

AM

Andrey Mokeev in Angular - русскоговорящее сообщество
🦄 Не поддавайся обману .toPromise()

Хорошая статья, которая доходчиво показывает почему unsubscribe() у Observable предпочтительнее Cancellation Token у Promise. Это основная причина, почему не рекомендуется использовать .toPromise(), так как он сильно усложняет жизнь с асинхронными потоками, потому что вам все еще необходимо отписываться.

👉 https://blog.bloomca.me/2017/12/04/how-to-cancel-your-promise.html
источник

F

Foma in Angular - русскоговорящее сообщество
Сергей
а auth.service подключать отдельно всем в  providers ?
или через auth.module ? или через shared.module ? лол )
https://stackblitz.com/edit/angular-zrbucy?file=src%2Fapp%2Fheader%2Fheader.component.html примерно так у тебя? кстате как материал подрубить на стакблитс?
источник

Вキ

Вертихвост キバ in Angular - русскоговорящее сообщество
Andrey Mokeev
как же хочется высказать своё ФЕ автору :)

в статье ни слова про реальный Cancellation token, а только сплошные костыли :)
По крайней мере это достаточно показательные примеры, которые возникают при переводе Observable в Promise
источник

АО

Алексей Охрименко in Angular - русскоговорящее сообщество
Andrey Mokeev
как же хочется высказать своё ФЕ автору :)

в статье ни слова про реальный Cancellation token, а только сплошные костыли :)
Так нету стандарта.. Cancellation token это кастыль который придумали чтобы хоть как-то продолжать пользоваться fetch

И пока никаких стандартов не планируется https://github.com/tc39/proposal-cancelable-promises

В общем с промисами все ужасно
источник

AM

Andrey Mokeev in Angular - русскоговорящее сообщество
Алексей Охрименко
Так нету стандарта.. Cancellation token это кастыль который придумали чтобы хоть как-то продолжать пользоваться fetch

И пока никаких стандартов не планируется https://github.com/tc39/proposal-cancelable-promises

В общем с промисами все ужасно
в js нынче есть AbortController (который поддерживает, например,  fetch)
источник

👀Ш

👀 Дима Шаповалов in Angular - русскоговорящее сообщество
вроде тут
источник

AM

Andrey Mokeev in Angular - русскоговорящее сообщество
он по своей сути очень похож на CancellationToken в .Net
источник

С

Сергей in Angular - русскоговорящее сообщество
да примерно так
источник

Вキ

Вертихвост キバ in Angular - русскоговорящее сообщество
Mireq Fallen
лан, с этим вроде, разобрались...
тогда... :)

А как проиходит очистка ресурсов в случае с RouteReuseStrategy?

мы же там храним какой-то абстрактный DetachedRouteHandle, и, как я понимаю, теряя на него ссылку GC должен собрать все остальное
но тогда нет механизмов вызова ngOnDestroy() и прочего
к тому же, если компонент подписан на какие-то события извне... GC его же не соберет...
Речь идет про кастомную стратегию?
источник

MF

Mireq Fallen in Angular - русскоговорящее сообщество
Вертихвост キバ
Речь идет про кастомную стратегию?
ага
источник

АО

Алексей Охрименко in Angular - русскоговорящее сообщество
Andrey Mokeev
в js нынче есть AbortController (который поддерживает, например,  fetch)
Ну во первых

Safari has window.AbortController defined in the DOM but it's just a stub, it does not abort requests at all. The same issue also affects Chrome on IOS and Firefox on IOS because they use the same WebKit rendering engine as Safari.

Even though window.AbortController is defined, it doesn't really abort fetch requests. See bug 174980.


А во вторых, чтобы ваш flow заработал с AbortController нужно вручную везде прописывать подержку (а если нужно отменить по цепочке целую серию promise-ов)
https://medium.com/@bramus/cancel-a-javascript-promise-with-abortcontroller-3540cbbda0a9

В общем я не понимаю чем это лучше Observable
источник

AM

Andrey Mokeev in Angular - русскоговорящее сообщество
Алексей Охрименко
Ну во первых

Safari has window.AbortController defined in the DOM but it's just a stub, it does not abort requests at all. The same issue also affects Chrome on IOS and Firefox on IOS because they use the same WebKit rendering engine as Safari.

Even though window.AbortController is defined, it doesn't really abort fetch requests. See bug 174980.


А во вторых, чтобы ваш flow заработал с AbortController нужно вручную везде прописывать подержку (а если нужно отменить по цепочке целую серию promise-ов)
https://medium.com/@bramus/cancel-a-javascript-promise-with-abortcontroller-3540cbbda0a9

В общем я не понимаю чем это лучше Observable
а я не говорю, что оно лучше, я говорю, что оно возможно :)

в .net мире по сути так же надо делать: хочешь поддерживать в своём API отмену — поддерживай доп. аргумент с CancellationToken :)
источник

АО

Алексей Охрименко in Angular - русскоговорящее сообщество
Andrey Mokeev
а я не говорю, что оно лучше, я говорю, что оно возможно :)

в .net мире по сути так же надо делать: хочешь поддерживать в своём API отмену — поддерживай доп. аргумент с CancellationToken :)
Сам бывший .Net разработчик, давно ушел. Но уже тогда предпочитал Observable - anync/await-у. Не исключаю что я предвзят 😄
источник

АО

Алексей Охрименко in Angular - русскоговорящее сообщество
Как-то приятнее что-ли когда cancelation/retry уже «встроенное» в интерфейс взаимодействия. Хотелось бы чего-то такого для async/await

const a =  await doPromise.retry().cancelOn(signal)
источник

Вキ

Вертихвост キバ in Angular - русскоговорящее сообщество
И не стоит забывать, что все отмены делаются нативными инструментами в RxJS. Поэтому попросту не думаешь проблемах с утечками, проставил или нет ли обработку отмены, и т.д. Все механизмы уже встроены в библиотеку, главное их правильно применять.

Впервую очередь акцент был нацелен именно на это: а стоит ли переводить поток в Promise и мучаться дополнительными обработками по его отмене.
источник

MF

Mireq Fallen in Angular - русскоговорящее сообщество
Вертихвост キバ
Речь идет про кастомную стратегию?
учитывая, что дефолтная стратегия НИКОГДА не детачит компоненты, то ее и рассматривать нет смысла в этом вопросе...

https://github.com/angular/angular/blob/8.2.8/packages/router/src/route_reuse_strategy.ts#L65-L73

export class DefaultRouteReuseStrategy implements RouteReuseStrategy {
 shouldDetach(route: ActivatedRouteSnapshot): boolean { return false; }
 // ...
}
источник

Вキ

Вертихвост キバ in Angular - русскоговорящее сообщество
Mireq Fallen
учитывая, что дефолтная стратегия НИКОГДА не детачит компоненты, то ее и рассматривать нет смысла в этом вопросе...

https://github.com/angular/angular/blob/8.2.8/packages/router/src/route_reuse_strategy.ts#L65-L73

export class DefaultRouteReuseStrategy implements RouteReuseStrategy {
 shouldDetach(route: ActivatedRouteSnapshot): boolean { return false; }
 // ...
}
Да, поэтому и уточнил. Тут по хорошему стоило бы взглянуть на саму стратегию, чтобы понимать проблему.

А сам механизм детача можно посмотреть тут https://github.com/angular/angular/blob/8.2.8/packages/router/src/operators/activate_routes.ts
источник

Вキ

Вертихвост キバ in Angular - русскоговорящее сообщество
Если вопрос лишь в том, будет ли вызываться ngOnDestroy при очищении GC, то нет. Так же нет гарантий, что GC отработает компоненты и ссылки в нем до конца, потому что они могут быть связаны с gc roots.
источник

d

double_b in Angular - русскоговорящее сообщество
Привет все. Кто пользовался этим https://flatpickr.js.org/options/? Вроде все отлично - но выбранную дату возвращает внутри массива как первый элемент - а мне нужен просто объект Date - в config указываю mode: 'single' - хотя в доке этот параметр указан как дефолтный. Также в доке есть передаваемая в конфиг ф-я parseDate - но вот как им пользоваться я как то не въехал - гугл ничего полезного не выдает или я не так ищу - посмотрите кто сможет. Заранее спасибо
источник