Обещания и сборка мусора - PullRequest
1 голос
/ 04 июня 2019

Я настроил проект с response-redux, и я использую redux-thunk в своих создателях действий для выполнения выборки. Вот пример моего thunk:

   export const doPostRequest = id => {
     return (dispatch, getState) => {
          const { id : initiailId } = getState().currentSelection
          return api.post(id).then(response => {
             if (!isEqual(initialId, getState().currentSelection.id)){
                return;
             }
             dispatch(someOtherAction(id))
             return Promise.resolve(true)
          })
          .catch(err => {})
      }
}

Как вы можете видеть, я хочу избежать doPostRequest, если текущий выбор моего состояния изменяется к моменту получения ответа. В противном случае я возвращаю Promise.resolve (true), чтобы onSubmit в MyComponent мог сбросить форму:

Внутри компонента (который является формой) у меня есть следующее для onSubmit:

class MyComponent extends React.PureComponent{

   onSubmit = id => {
       this.props.dispatch(doPostRequest(id))
          .then(shouldReset => shouldReset && resetForm())
   }

   render(){
       return <form onSubmit={this.onSubmit}>.....</form>
   }

}

В большинстве случаев, когда мне действительно не нужно ничего делать, кроме выборки значений, я не выполняю цепочку Promise для thunk, даже если она возвращает обещание, но здесь мне нужно выполнить resetForm после завершения запроса успех.

Достаточно ли хороша эта реализация, в том числе и для GC? Как сборка мусора Promises? Есть ли проблема, если я возвращаю fetch (). Then () без дальнейшей цепочки?

...