Sto costruendo un'app React/Redux utilizzando il middleware redux-thunk per creare e gestire le richieste Ajax. Ho un particolare thunk che viene sparato abbastanza spesso, e vorrei cancellare tutte le richieste Ajax precedentemente avviate prima di spararne una nuova. È possibile?Annullamento dell'azione asincrona precedente utilizzando redux-thunk
risposta
Un approccio sarebbe quello di contrassegnare quelle richieste come cancellate dando loro id casuali e controllando il suo stato prima di gestire il risultato.
Il modo per farlo è assegnare un id casuale per questa chiamata nella prima spedizione (all'interno del thunk) e controllarlo nel riduttore prima di gestire il risultato.
const actionId = Math.random();
dispatch({type: AJAX_LOAD_CONST, id:actionId })
Quando si desidera annullare tutte le richiesta di utilizzare
dispatch({type:HANDLE_AJAX_RESPONSE, id:actionId, results: json })
Quando si desidera gestire i risultati non dimenticate di inviare l'id che si u
e in il riduttore ha qualcosa di simile:
function reducer(state = initialState, action) {
switch (action.type) {
case actions.AJAX_LOAD_CONST:
return Object.assign({}, state, { ajax: state.ajax.concat(action.id) });
case actions.CANCEL_ALL_AJAX:
return Object.assign({}, state, { ajax: [] });
case actions.HANDLE_AJAX_RESPONSE:
if (state.ajax.includes(action.id) {
//return state reduced with action.results here
}
return state;
}
}
Se si utilizza XMLH ttpRequest o uno dei suoi wrapper (JQuery?) puoi anche memorizzare le richieste e chiamare request.abort(). se usi la nuova API di recupero non hai questo lusso in quanto le promesse mancano di questo comportamento.
Puoi far sì che il tuo creatore di azioni restituisca la promessa, verrà restituito dalla funzione di invio, quindi sarà possibile annullarlo. Ecco un esempio:
Azione creatore
function doSomething() {
return (dispatch) => {
return $.ajax(...).done(...).fail(...);
}
}
Il componente
componentDidMount(){
this.previousPromise = this.props.dispatch(doSomething());
}
somefnct() {
this.previousPromise.abort();
}
- 1. annullamento attività asincrona C# xamarin
- 2. Annullamento esecutore
- 3. Asincrona l'attraversamento dell'albero utilizzando async.js
- 4. Schema di differenza finita asincrona utilizzando MPI_Put
- 5. meccanismo di annullamento asincrono/attendi
- 6. come inviare e-mail utilizzando asincrona django
- 7. Annullamento di un thread utilizzando pthread_cancel: buona pratica o errata
- 8. Annullamento di richiesta GET al server utilizzando Restangular
- 9. utilizzando jQuery Selezionare precedente testo td
- 10. Annullamento di Git Clean
- 11. Annullamento di un PendingIntent
- 12. NSUserNotificationCenter notifica di annullamento
- 13. Annullamento caricamenti AWS S3
- 14. Registrazione asincrona
- 15. Scrivere un'API asincrona/non asincrona ben progettata
- 16. Come eseguire il codice quando si cancella un annullamento?
- 17. Annullamento git update-index --assume-invariata
- 18. Elaborazione asincrona Tomcat 7
- 19. Migliori pratiche di annullamento attività
- 20. Annullamento di una spinta Mercurial
- 21. TortoiseSVN - Annullamento di un ripristino
- 22. rotaie Annullamento generano ideare vista
- 23. compiti Annullamento del metodo Dispose
- 24. Annullamento "Imposta come pagina iniziale"
- 25. Programmazione asincrona in Grails
- 26. Elaborazione asincrona di Django
- 27. Cambia in modo silenzioso l'URL con il precedente utilizzando Backbone.js
- 28. Come ottenere l'URL della pagina precedente utilizzando jquery
- 29. come ridefinire una macro utilizzando la sua precedente definizione
- 30. Utilizzando git flow, come potrei tornare a una versione precedente?