@JSlang

Страница 1218 из 2237
Sergey
22.08.2017
10:09:42
Я такую же сделал, лол Но это не айс, на самом деле
потому-что не будет работать для цепочки промисвов?

Сергей
22.08.2017
10:09:43
я считаю что отмена промиса это бред

Дмитрий
22.08.2017
10:09:46
Промис с отменой — это два встречных промиса

Один из которых является токеном для отмены другого

Google
Дмитрий
22.08.2017
10:10:38
я считаю что отмена промиса это бред
Декларативная отмена промиса просто означает что результаты его выполнения нам больше не интересны

Сергей
22.08.2017
10:11:01
как если const foo = getFoo()

как отменить getFoo()

что будет в foo?

null?

undefined?

Дмитрий
22.08.2017
10:12:03
Очень резонный вопрос, это действительно неоднозначно

Все по разному это расценивают

Sergey
22.08.2017
10:13:01
что будет в foo?
этот асинк в итоге возратит промис, ну ииии ты уже просто отменяй конечный промисс, а не промежуточные

Дмитрий
22.08.2017
10:13:35
axios падает с CancellationError (на случай когда reject нежелателен там предусмотрен rejectInterceptor)

Google
Sergey
22.08.2017
10:14:09
отмени мне вызов обычной функции
а для чего такое делать?

Сергей
22.08.2017
10:14:10
я когда-то писал такое: https://github.com/LestaD/timeout.js/blob/master/src/timeout.js

а для чего такое делать?
так и я ж об этом

Дмитрий
22.08.2017
10:14:32
написал свою реализацию. Как думаете - норм? или какашка? https://repl.it/KUE8
https://medium.com/@benlesh/promise-cancellation-is-dead-long-live-promise-cancellation-c6601f1f5082 Я только вчера сидел изучал) Я сейчас как занимаюсь проблемой отмены асинхронных вызовов

Сергей
22.08.2017
10:14:36
а для чего такое делать?
промисы это всего лишь временная прослойка для результата или ошибки

Marina
22.08.2017
10:15:46
Пацаны, подскажите плз чатики iOSеров?

Sergey
22.08.2017
10:15:49
так и я ж об этом
ну, мне надо, у меня в реакте setState делаеться по возращению результата промиса, а если пользоваетль демонтировал компонент, и пришел запрос, вот тут и нужно отменить промис

Sergey
22.08.2017
10:16:49
проверкой типа

Сергей
22.08.2017
10:16:56
какого

функцию calculateData нельзя отменить

Дмитрий
22.08.2017
10:17:27
Sergey
22.08.2017
10:17:46
ну тогда все заблочиться, пока она не отработает ?

Сергей
22.08.2017
10:18:14
самое простое решение которое я вижу class Demo extends Component { mounted = false componentDidMount() { this.mounted = true getData().then(data => { if (this.mounted) this.setState({ data }) }) } componentWillUnmount() { this.mounted = false } }

раз девелоперы решили выпилить isMounted

Сергей
22.08.2017
10:20:39
отмена промиса это жесть

Дмитрий
22.08.2017
10:20:43
Фактически это cancellation token as it is

Google
Сергей
22.08.2017
10:20:43
костылить ради чего?

зато явно

но я бы заюзал flutures

и код почище был бы везде

Котяй Негодяй
22.08.2017
10:21:23
зато явно
А потом тебе надоест, и ты захочешь абстракцию.

И будет неявно. Хе-хе.

Дмитрий
22.08.2017
10:21:33
В futures кстати круто то, что ты явно задаёшь функцию для отмены

В результате фактически имеем деструктор для ресурсов

Сергей
22.08.2017
10:22:01
Котяй Негодяй
22.08.2017
10:22:11
и я напишу HOC
HOC?.. Промис?.. Ээээ

А човаще надо было?

Сергей
22.08.2017
10:23:10
чтобы не выполнился setState в .then если компонента больше нет

Котяй Негодяй
22.08.2017
10:23:11
Рендерить чо-нить по событию?

Sergey
22.08.2017
10:23:48
самое простое решение которое я вижу class Demo extends Component { mounted = false componentDidMount() { this.mounted = true getData().then(data => { if (this.mounted) this.setState({ data }) }) } componentWillUnmount() { this.mounted = false } }
мне мой вариант нравиться тем, что я сделал один раз ф-цию, прокидаваю туда промис и получаю возможность его отменять, в твоем же варианте, это в каждом компонентие нужно заводить переменную, писать componentWillUnmount, поэтому нельзя будет юзать компоненты функции, и блин в каждом компоненте писать это не айс, это не DRY

Дмитрий
22.08.2017
10:23:54
чтобы не выполнился setState в .then если компонента больше нет
Это кстати в хэндлерах recompose из коробки, что круто

Сергей
22.08.2017
10:24:46
лол

Sergey
22.08.2017
10:24:48
мой вар дешевле

Google
Сергей
22.08.2017
10:24:51
ну пиши)

че спрашивать у сообщества

Котяй Негодяй
22.08.2017
10:25:04
Дешевле рекомпоуз.

Дмитрий
22.08.2017
10:25:05
То есть, застряв в той же проблеме что сейчас Sergey, я обнаружил, что смена явной функции класса на хэндлер из recompose решает проблему

Котяй Негодяй
22.08.2017
10:25:40
Сергей, вот тебе кратчайший путь.

Дмитрий
22.08.2017
10:25:56
имеешь ввиду withHandlers?
Да, они просто не вызываются если компонент уже отмонтирован

Сергей
22.08.2017
10:26:09
Дмитрий
22.08.2017
10:26:19
Ну это наверное от кейса зависит

Admin
ERROR: S client not available

Сергей
22.08.2017
10:26:21
хотя может я че не так делал

Котяй Негодяй
22.08.2017
10:26:25
Надо разковырять эту проблему только для того, чтобы разобраться, как работает, но это потом. А чтобы зарелизить фичу, бери рекомпоуз.

Сергей
22.08.2017
10:27:16
Ну это наверное от кейса зависит
withState('name', 'setName', ''), withHandlers({ onClick: props => data => event => { props.setName(data.name) } }) <button onClick={props.onClick(item.name) /> чет мне кажется так не прокатит

Котяй Негодяй
22.08.2017
10:28:02
withState('name', 'setName', ''), withHandlers({ onClick: ({ setName }) => data => event => { setName(data.name) } })

Котяй Негодяй
22.08.2017
10:28:53
У тебя на момент обращения к setName же падает?

Google
Котяй Негодяй
22.08.2017
10:29:04
Типа её не существует?

Дмитрий
22.08.2017
10:29:07
так свалил же
А, точно Хз тогда короч

Котяй Негодяй
22.08.2017
10:29:20
Я просто другого кейса не могу придумать.

Сергей
22.08.2017
10:29:24
Котяй Негодяй
22.08.2017
10:29:28
Хм.

Сергей
22.08.2017
10:29:42
я в итоге написал hoc который разруливает всё сам

оч удобно

Дмитрий
22.08.2017
10:32:33
Вообще сложная тема, даже автор rxjs в статье выше пишет что с отменой у них не всё гладко

Сергей
22.08.2017
10:33:01
ну поэтому я не отменяю, а проектирую так, чтобы отмена не понадобилась

хотя isMounted, тоже своего рода отмена но тут скорее игнор результата, нежели отмена

Дмитрий
22.08.2017
10:33:41
Дак я тебе про это сразу и сказал)

Декларативная отмена промиса просто означает что результаты его выполнения нам больше не интересны

Сергей
22.08.2017
10:34:09
видел такое getData(props.id) .then(checkMounted(this)) .then(data => this.setState({ data })

Дмитрий
22.08.2017
10:34:30
The new cancellation has "don't care" semantics while the old cancellation had abort semantics.

Сергей
22.08.2017
10:35:02
axios просто выкидывает результат, но не разрывает соединение?

Дмитрий
22.08.2017
10:35:30
Хм, не, гоню про axios

Он падает с CancellationError

И имеет встроенные средства для того чтобы ты мог заигнорить эту ошибку если хочешь

Сергей
22.08.2017
10:36:28




Andrey
22.08.2017
10:36:46
open new issue?

Страница 1218 из 2237