
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:11

Дмитрий
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

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

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

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

Сергей
22.08.2017
10:16:08
как бы ты решал проблему?

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

Sergey
22.08.2017
10:20:21

Сергей
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

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

Сергей
22.08.2017
10:22:01

Котяй Негодяй
22.08.2017
10:22:11
А човаще надо было?

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

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

Sergey
22.08.2017
10:23:48

Дмитрий
22.08.2017
10:23:54

Сергей
22.08.2017
10:24:19

Sergey
22.08.2017
10:24:42

Сергей
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:34

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

Дмитрий
22.08.2017
10:25:56

Сергей
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) />
чет мне кажется так не прокатит

Sergey
22.08.2017
10:27:39

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

Дмитрий
22.08.2017
10:28:35

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

Котяй Негодяй
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?