Могу я получить пример того, как отменить поток MobX?

В официальной документации Mobx указано, что вы можете вызвать cancel для возвращенного обещания из потока. https://mobx.js.org/best/actions.html Есть только нет примеров, как это сделать.

Контекст: вызов асинхронного действия внутри componentDidMount, нам нужно отменить это действие внутри componentWillUnmount. Хотите также, чтобы setState сообщал, что пользовательский интерфейс может отображаться после выполнения обещания.


      componentDidMount() {
        this._fetchRawEguide = this.props.combinedEguide.fetchRawEguide(null, true)
        .then(() => {
          this._fetchRawEguide = null;
          this.setState({   
            loaded: true
          });
        })
      }
      componentWillUnmount() {
        if (this._fetchRawEguide) {
          this._fetchRawEguide.cancel();
        }
      }

Действие Mobx выглядит примерно так


 @action
   fetchRawEguide = flow(function*(date, redirectOnError = false) {
     try {
       const res = yield request(...);

Возникла проблема, когда говорится, что .cancel () не существует, когда он пытается его вызвать.

Я пробовал использовать when () с обычным await / async, похоже, это не сработало. Если у кого-то есть пример для await / async, это было бы здорово.


person Alex Donley    schedule 19.07.2019    source источник
comment
Я думал в точности о том же, что и читал это, так что спасибо за то, что разместили этот вопрос, а затем ответили на него!   -  person Joshua Pinter    schedule 14.08.2020


Ответы (1)


Казалось, это сработало

this._fetchRawEguide = this.props.combinedEguide.fetchRawEguide(null, true);
    this._fetchRawEguide.then(() => {
      this._fetchRawEguide = null;
      this.setState({   
        loaded: true
      });
    });

Я думаю, что применение .then к обещанию, возвращаемому потоком, может привести к его приведению и удалению функции .cancel

person Alex Donley    schedule 19.07.2019
comment
Но поток предполагается использовать с async функциями, которые используют await вместо then() и catch(), верно? - person Joshua Pinter; 14.08.2020