Redux: рдХрдИ async рдХреЙрд▓ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП redux рдореБрд╣рд╛рд╡рд░ рдХреНрдпрд╛ рд╣реИ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 14 рд╕рд┐рддре░ 2015  ┬╖  30рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: reduxjs/redux

рдЬрдм рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВ, рдореБрдЭреЗ 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ async http рдХреЙрд▓ рдХрд░рдиреЗ рдФрд░ рдЙрдирдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпреЗ 2 рдХреЙрд▓ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рд┐рдбреНрдпреВрд╕рд░ рдореЗрдВ рдЕрдкрдирд╛ рдбреЗрдЯрд╛ рдбрд╛рд▓реЗрдВрдЧреЗред

рдореИрдВ рдПрдХ рдПрдХрд▓ async рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдЯрд░реНрди рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ async рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдЪреНрдЫрд╛ рдирдореВрдирд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ _both_ рдХреЗ рдЙрдирдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЖрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ Redux рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВ рдорд╛рди рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдЖрдк Redux Thunk рдорд┐рдбрд┐рд▓рд╡реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдХреБрдЫ рдПрдХреНрд╢рди рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВ:

import 'babel-core/polyfill'; // so I can use Promises
import fetch from 'isomorphic-fetch'; // so I can use fetch()

function doSomething() {
  return dispatch => 
    fetch(
      '/api/something'
    ).then(
      response => response.json()
    ).then(
      json => dispatch({ type: DO_SOMETHING, json }),
      err => dispatch({ type: SOMETHING_FAILED, err })
    );
}

function doSomethingElse() {
  return dispatch => 
    fetch(
      '/api/something'
    ).then(
      response => response.json()
    ).then(
      json => dispatch({ type: DO_SOMETHING_ELSE, json }),
      err => dispatch({ type: SOMETHING_ELSE_FAILED, err })
    );
}

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреИрд╕реЗ рдореИрдВ рдЗрд╕реЗ рдПрдХ рдХрджрдо Promise рдмрд╣реБрдд рдЕрдВрдд рдореЗрдВ рдЪреЗрди рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЗ рдЕрдВрджрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░рд┐рдЯрд░реНрди рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрдХрд░ рдмрдирд╛рддрд╛ рд╣реВрдВред рдпрд╣ рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ:

store.dispatch(doSomething()).then(() => {
  console.log('I did something');
});

рдЬрдм рдЖрдк Redux Thunk рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ dispatch рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд░рд┐рдЯрд░реНрди рдорд╛рди рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк thunk рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рд╕реЗ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд╛рджрд╛ред

рдпрд╣ рдЖрдкрдХреЛ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП Promise.all() рдЬреИрд╕реЗ рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ:

Promise.all([
  store.dispatch(doSomething()),
  store.dispatch(doSomethingElse())
]).then(() => {
  console.log('I did everything!');
});

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдПрдХ рдЕрдиреНрдп рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ рдЬреЛ рдкрд┐рдЫрд▓реЗ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХреЗ _composition_ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛, рдФрд░ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ Promise.all рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛:

function doEverything() {
  return dispatch => Promise.all([
    dispatch(doSomething()),
    dispatch(doSomethingElse())
  ]);
}

рдЕрдм рдЖрдк рдмрд╕ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ

store.dispatch(doEverything()).then(() => {
  console.log('I did everything!');
});

рдЦреБрд╢ рдкреНрд░реЗрд╖рдг!

рд╕рднреА 30 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВ рдорд╛рди рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдЖрдк Redux Thunk рдорд┐рдбрд┐рд▓рд╡реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдХреБрдЫ рдПрдХреНрд╢рди рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВ:

import 'babel-core/polyfill'; // so I can use Promises
import fetch from 'isomorphic-fetch'; // so I can use fetch()

function doSomething() {
  return dispatch => 
    fetch(
      '/api/something'
    ).then(
      response => response.json()
    ).then(
      json => dispatch({ type: DO_SOMETHING, json }),
      err => dispatch({ type: SOMETHING_FAILED, err })
    );
}

function doSomethingElse() {
  return dispatch => 
    fetch(
      '/api/something'
    ).then(
      response => response.json()
    ).then(
      json => dispatch({ type: DO_SOMETHING_ELSE, json }),
      err => dispatch({ type: SOMETHING_ELSE_FAILED, err })
    );
}

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреИрд╕реЗ рдореИрдВ рдЗрд╕реЗ рдПрдХ рдХрджрдо Promise рдмрд╣реБрдд рдЕрдВрдд рдореЗрдВ рдЪреЗрди рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЗ рдЕрдВрджрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░рд┐рдЯрд░реНрди рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрдХрд░ рдмрдирд╛рддрд╛ рд╣реВрдВред рдпрд╣ рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ:

store.dispatch(doSomething()).then(() => {
  console.log('I did something');
});

рдЬрдм рдЖрдк Redux Thunk рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ dispatch рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд░рд┐рдЯрд░реНрди рдорд╛рди рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк thunk рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рд╕реЗ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд╛рджрд╛ред

рдпрд╣ рдЖрдкрдХреЛ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП Promise.all() рдЬреИрд╕реЗ рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ:

Promise.all([
  store.dispatch(doSomething()),
  store.dispatch(doSomethingElse())
]).then(() => {
  console.log('I did everything!');
});

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдПрдХ рдЕрдиреНрдп рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ рдЬреЛ рдкрд┐рдЫрд▓реЗ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХреЗ _composition_ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛, рдФрд░ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ Promise.all рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛:

function doEverything() {
  return dispatch => Promise.all([
    dispatch(doSomething()),
    dispatch(doSomethingElse())
  ]);
}

рдЕрдм рдЖрдк рдмрд╕ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ

store.dispatch(doEverything()).then(() => {
  console.log('I did everything!');
});

рдЦреБрд╢ рдкреНрд░реЗрд╖рдг!

@gaearon рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЖрдк thunk promise рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХрд╛ рдкрдХреНрд╖ рд▓реЗрддреЗ рд╣реИрдВ? рдпрд╛ рд╕рд▓рд╛рд╣ рдкрд░ рдХрд┐ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ? рдзрдиреНрдпрд╡рд╛рджред

рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░рдг рдирд╣реАрдВ, рдореИрдВ рдЗрд╕рд╕реЗ рдмрд╕ рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рд╣реВрдВред
рджреЛрдиреЛрдВ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ!

рд╕рдордЭ рдЧрдпрд╛ рдзрдиреНрдпрд╡рд╛рдж!

JFYI :)
screen shot 2015-09-14 at 11 06 42 am

рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдЗрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ https://github.com/Cron-J/redux-async-transitions

@ рдмреЗрдпрд░рди рдХреНрд╡рд┐рдХ

store.dispatch(doSomething()).then(() => {
  console.log('I did something');
});

- рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдХрд┐ "рдореИрдВрдиреЗ рдХреБрдЫ рдХрд┐рдпрд╛" рдмреНрд▓реЙрдХ рддрдм рднреА рд╣рд┐рдЯ рд╣реЛрдЧрд╛ рдЬрдм doSomething рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ - рдХреНрдпреЛрдВрдХрд┐ рдЖрдк doSomething рдЪреЗрди рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЛ рджреЛрдмрд╛рд░рд╛ рдирд╣реАрдВ рдкрдХрдбрд╝ рд░рд╣реЗ рд╣реИрдВ рдЬрдм рдЖрдк рдЗрд╕реЗ рдкрдХрдбрд╝ рд▓реЗрдВрдЧреЗред рдХреНрдпрд╛ рд╡рд╣ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╣реИ? рдпрджрд┐ рдирд╣реАрдВ - рдФрд░ рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╡рд╣рд╛рдВ рддреНрд░реБрдЯрд┐ рдХреЛ рд╣рдЯрд╛ рджреЗрдВрдЧреЗ - рддреЛ рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рдХреЙрд▓рд░ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд╕рдВрднрд╛рд▓ рд▓реЗрдВрдЧреЗ?

рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдореЗрд░рд╛ рдорддрд▓рдм рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдПрдХ рдорд┐рдирдЯ рдирд╣реАрдВ рджрд┐рдпрд╛ред

рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рд╕реЗ рд╡рд╛рджреЗ рд╡рд╛рдкрд╕ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдмрд╛рдХреА рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЙрдЦрд╛рдбрд╝рдирд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЙрдиреНрд╣реЗрдВ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ, рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ Redux рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЗрд░реА рд╕рд▓рд╛рд╣ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдЪреНрдЫреА рд╣реИ, рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрджрд░реНрдн рд╣реИ рдФрд░ рдЬрд┐рд╕ рд╢реИрд▓реА рдХреЛ рдЖрдк рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ рдХрднреА рднреА рд╣реЛрдЧрд╛ред

рдЕрдЪреНрдЫрд╛ рд╣реИ рдзрдиреНрдпрд╡рд╛рдж! рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдорд╛рдорд▓рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдХреБрдЫ рдЬрд╛рджреВ рдирд╣реАрдВ рдерд╛ рдЬреЛ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рдерд╛ред

рдЪреВрдВрдХрд┐ Redux рдЕрдиреБрдХреВрд▓рди рдпреЛрдЧреНрдп рд╣реИ, dispatch рд╡рд╛рдкрд╕реА рдХрд╛ рдореВрд▓реНрдп рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡рд╛рджрд╛ рдирд╣реАрдВ рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ рдПрдХ рдореБрджреНрджреЗ рдкрд░ рднрд╛рдЧ рдЧрдпрд╛ рдЬрдм рд╕реЗ рдореИрдВ redux-loop рд▓реЗрддрд╛ рд╣реВрдВред рдпрд╣ рдПрдХ рд▓рд┐рдкрдЯреЗ рд╡рд╛рджреЗ (https://github.com/raisemarketplace/redux-loop/blob/master/modules/effects.js#L38) рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП dispatch рдХрд╛ рдЯреНрд╡рд┐рд╕реНрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо dispatch рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЦреИрд░, рдЬреИрд╕рд╛ рдХрд┐ рдбреИрди рдиреЗ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдКрдкрд░ рдХрд╣рд╛: рдпрд╣ _your_ рдРрдк рд╣реИ, _you_ рдЖрдкрдХреЗ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП _you_ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред

@markerikson dispatch рдХрд╛ рд░рд┐рдЯрд░реНрди рдорд╛рди рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЗ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рд╣реЛрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдЗрд╕реЗ рдЯреНрд╡рд┐рдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди, рдореБрдЭреЗ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдорд┐рд▓ рдЧрдпрд╛ред рдЪреЗрди then dispatch(actonCreator()) рдмрдЬрд╛рдп, рд╣рдо actionCreator() рдкрд░ рдЪреЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рд╛рдВ, рдорд┐рдбрд▓рд╡реЗрдпрд░ рдЪреАрдЬреЛрдВ рдХреЛ рдЯреНрд╡рд┐рд╕реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдХрд╣рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ _y_ рдЖрдкрдХреЗ рдЕрдкрдиреЗ рдРрдк рдореЗрдВ рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╕реЗрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ :)

рд╣рд╛рдп @gaearon , рддреНрд╡рд░рд┐рдд (рдЙрдореНрдореАрдж рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд) рд╕рд╡рд╛рд▓! рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреНрдпрд╛ рд╣реИрдВ

function fetchDataBWhichDependsOnA() {
  return dispatch => {
    dispatch(fetchDataA())
      .then(() => {
        fetch('/api/get/data/B')
          .then(dispatch(receiveDataB(response.data)))
      })
  }
}

рдЗрд╕ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ 2 рдиреЗрд╕реНрдЯреЗрдб рдПрд╕реНрдХреЙрди рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реИрдВ, рд╡реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛ рд░рд╣реА рд╣реИред рдореИрдВ fetchDataA() рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЙрд▓ рдХрд╛ рдХреЗрд╡рд▓ 1 рд╕реНрддрд░ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ fetchDataBWhichDependsOnA() рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛, рддреЛ рдореИрдВ store then рдмреНрд▓реЙрдХ рдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдЕрджреНрдпрддрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред

@timothytong рдЖрдк рд╡рд╛рджреЗ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк dispatch рдФрд░ рдиреЗрд╕реНрдЯреЗрдб fetch рдХреЙрд▓ рд╕реЗ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рддрдм рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдХрд┐ рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣рд▓ рди рд╣реЛ рдЬрд╛рдПред

@johanneslumpe рдХреА рдЕрдЪреНрдЫреА рдкрдХрдбрд╝, рдзрдиреНрдпрд╡рд╛рдж рджреЛрд╕реНрдд! рдЕрдм рдпрд╣ рд╕рдм рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рд╕рд╡рд╛рд▓ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдПрдХ async рд▓рд╛рдиреЗ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ?

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдереА рдФрд░ 30 рдорд┐рдирдЯ рддрдХ рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА рд░рд╛рд╕реНрддреЗ рдкрд░ рд╣реИред

https://github.com/Sailias/sync-thunk

рдореЗрд░рд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдШрдЯрдХ рдХреБрдЫ рд░рд┐рдбрдХреНрд╕ рд╕реНрдЯреЗрдЯреНрд╕ рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрджрд┐ рд╡реЗ рдирд╣реАрдВ рд╣реИрдВ рддреЛ рдЙрдиреНрд╣реЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореИрдк рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрдиреНрд╣реЗрдВ then рд╕рд╛рде рдЪреЗрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рд░рд╛рдЬреНрдп рд╕реЗ рдбреЗрдЯрд╛ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрд╢реНрд░рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдиреЗ рдЗрд╕реЗ рдЖрдмрд╛рдж рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛ред

@gaearon

Promise.all([
  store.dispatch(doSomething()),
  store.dispatch(doSomethingElse())
]).then(() => {
  console.log('I did everything!');
});

рдЗрд╕ рдкрд░ рдореЗрд░рд╛ рдПрдХ рд╕рд╡рд╛рд▓ рд╣реИред рдорд╛рдл рдХрд░рдирд╛ рдЕрдЧрд░ рдпрд╣ рдЗрддрдирд╛ рдмреБрдирд┐рдпрд╛рджреА рд╣реИред

рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ, рджреЛ рдкреНрд░реЗрд╖рдг рд╣реЛрдВрдЧреЗред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рджреЛ рдмрд╛рд░ рдШрдЯрдХ рдХрд╛ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди, рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдШрдЯрдХ рджреЛрдиреЛрдВ рдбреЗрдЯрд╛ рдХреЛ рдХреБрдЫ рд╕рд╛рд░реНрдердХ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ?

рддреЛ, рдЙрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ, рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдШрдЯрдХ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рд╡рд╣ рддрдм рд╣реЛ, рдЬрдм рд╕рднреА async рдХреНрд░рд┐рдпрд╛ рдкреВрд░реА рд╣реЛ рдЬрд╛рдПрдВред

рдореБрдЭреЗ рдХреБрдЫ рдмрд┐рдЪреМрд▓рд┐рдпреЛрдВ рдХреЗ рдирд╛рдо рдорд┐рд▓реЗ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рджрд┐рдЦрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ redux-batched-subscribe рдФрд░ redux-batched-actions ред рд▓реЗрдХрд┐рди, рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рддред

рдпрджрд┐ рдпрд╣ рдПрдХ рд╡реИрдз рдкрд░рд┐рджреГрд╢реНрдп рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?

@jintoppy рдЕрдЧрд░ рдЖрдкрдХрд╛ рдкреВрдЫрдирд╛ рдХрд┐рд╕реА рдШрдЯрдХ рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдХреЙрд▓ рд╕реЗ рдмрдЪрдирд╛ рд╣реИ рддреЛ Promise.all рд╕рдорд╛рдзрд╛рди рдЖрдкрдХреА рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛; рдХреНрдпреЛрдВрдХрд┐ рджреЛрдиреЛрдВ doSomething() and doSomething() рд╕рднреА рдкреНрд░реЗрд╖рдг рдбреЗрдЯрд╛ рдЬреЛ рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдШрдЯрдХ рд░реЗрдВрдбрд░ рдХрд╛ рдХрд╛рд░рдг рдмрдирддреЗ рд╣реИрдВред

@jintoppy рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдорд┐рдбрд▓рд╡рд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?
рдХреНрдпрд╛ рдЖрдк рдХреА рддрд░рд╣ рд╣реИ рдХрд┐ smth рдХрд░рдиреЗ рдореЗрдВ рдмрд╛рдзрд╛ рд╣реИред

// action creator
function fetchAB() {
  return dispatch => {
    const fetchA = fetch( 'api/endpoint/A' );
    const fetchB = fetch( 'api/endpoint/B' );
    return Promise.all([ fetchA, fetchB ])
      .then( values => dispatch(showABAction(values)) )
      .catch( err => throw err );
  }
} 

рдЖрдк рдЕрдкрдиреЗ рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрди рд╕рднреА рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдПрдХреНрд╢рди рдХреЗ рдкреНрд░реЗрд╖рдг рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ reducer рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд░рд╛рдЬреНрдп рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд░реЗрдВрдбрд░ () рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рднреА рдирд┐рдХрд╛рд▓ рджреА рдЬрд╛рдПрдЧреАред

@apranovich : рдореИрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рджреЗрдЦрддрд╛ рд╣реВрдВред рдЕрдм, рдореБрдЭреЗ рдПрдХ рдПрдХреНрд╢рди рдореЗрдВ рдХрдИ рд╕рд╛рд░реЗ рднреНрд░реВрдг рдХреЛ рдорд┐рд▓рд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рд╣реИ, рддреЛ 10 async рдХреЙрд▓ рдХрд░реЗрдВ, рдореБрдЭреЗ рдЙрди рд╕рднреА рдХреЛ рдПрдХ рд╣реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдореИрдВ рдмрд╛рдж рдореЗрдВ рдЗрди 10 рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ? рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ, рдореВрд▓ рд░реВрдк рд╕реЗ, рдЖрдкрдХреЗ рд╕рднреА async рддрд░реНрдХ рдПрдХ рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реЛрдВрдЧреЗред

рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред рддреНрд╡рд░рд┐рдд рдкреНрд░рд╢реНрди, рдЙрд╕реА рдХреЛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЬрдм рдПрдХ рднреНрд░реВрдг рдбреЗрдЯрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рдЕрдЧрд▓реЗ рд▓рд╛рдиреЗ рдХреА рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдореБрдлреНрдд рдореМрд╕рдо рдПрдкреАрдЖрдИ рдПрдВрдбрдкреЙрдЗрдВрдЯ рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рдПрдХ рдЖрдИрдбреА (рдкрд╣рд▓рд╛ fetch ) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдпреЛрд▓реЛрдХреЗрд╢рди рдЗрдирдкреБрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рд╕реНрдерд╛рди рдХреЗ рдореМрд╕рдо рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓реЗ fetch рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЬреАрдм рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдЗрд╕реА рддрд░рд╣ рдХреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИред рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдзрдиреНрдпрд╡рд╛рдж!

рд╣рд╛рдп @gaearon , рдореИрдВ рдЕрдкрдиреЗ рдЗрд╕ рд╕рд╡рд╛рд▓ рдкрд░ рдЖрдкрдХреА рд╕рдореАрдХреНрд╖рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдореБрдЭреЗ рджреЛ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдиреЗрд╕реНрдЯреЗрдб рдПрд╕реНрдХреНрд╕реНрдЯ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИред рджреВрд╕рд░реА рдПрдкреАрдЖрдИ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред

export const getApi=()=>{
        return(d)=>{
        axios({
            method:'GET',
            url:Constants.URLConst+"/UserProfile",
            headers:Constants.headers
        }).then((response)=>{
            return d({
                type:GET_API_DATA,
                response,
                axios({
                    method:'GET',
                    url:Constants.URLConst+"/UserProfileImage?enterpriseId="+response.data.ProfileData.EnterpriseId,
                    headers:Constants.headers
                }).then((response1)=>{
                    return d({
                        type:GET_PROFILE_IMAGE,
                        response1
                    })
                })
            })
        }).catch((e)=>{
            console.log("e",e);
        })
    }

}

рдореИрдВрдиреЗ рдКрдкрд░ рдЬреИрд╕рд╛ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдореБрдЭреЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рджреЛрдиреЛрдВ рдПрдкреАрдЖрдИ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рддреЛ, рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ?

рдзрдиреНрдпрд╡рд╛рджред

@ c0b41 , рдХреГрдкрдпрд╛ рдЕрджреНрдпрддрди рдкреНрд░рд╢реНрди рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред

рд╣реЗ @ c0b41 , рдпрд╣ рджреВрд╕рд░реА рдЕрдХреНрд╖реАрдп рдХреЙрд▓ рдореЗрдВ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рджреЗ рд░рд╣рд╛ рд╣реИред

@ aayushis12 , @ c0b41 : рдпрд╣ рдПрдХ рдмрдЧ рдЯреНрд░реИрдХрд░ рд╣реИ, рди рдХрд┐ рд╕рд╣рд╛рдпрддрд╛ рдлреЛрд░рдоред рдЖрдкрдХреЛ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдпрд╛ рд░рд┐рдПрдХреНрдЯрд┐рдлреНрд▓рдХреНрд╕ рдкрд░ рдпрд╣ рд╕рд╡рд╛рд▓ рдкреВрдЫрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдРрд╕реЗ рдФрд░ рд▓реЛрдЧ рд╣реЛрдВрдЧреЗ рдЬреЛ рд╕рд╡рд╛рд▓ рджреЗрдЦреЗрдВрдЧреЗ рдФрд░ рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред

рдЕрдиреБрднрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП

рдореИрдВрдиреЗ рд╕рдм рдХреБрдЫ рдХрд┐рдпрд╛

рд╕рднреА async рдХреЙрд▓ рд╣рд▓ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореБрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдПрдХ рдмрдпрд╛рди рдпрд╛ рдЕрдкрдиреЗ async рдПрдХреНрд╢рди рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рд╕реЗ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд▓реМрдЯрд╛ рд░рд╣реЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ doSomethingElse() {} рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ

function doSomethingElse() {
  return dispatch => {
    fetch(
      '/api/something'
    ).then(
      response => response.json()
    ).then(
      json => dispatch({ type: DO_SOMETHING_ELSE, json }),
      err => dispatch({ type: SOMETHING_ELSE_FAILED, err })
    );
  }
}

"рдореИрдВрдиреЗ рд╕рдм рдХреБрдЫ рдХрд┐рдпрд╛" doSomethingElse() рд╣рд▓ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рд┐рдВрдЯ рд╣реЛрдЧрд╛ред => рдмрд╛рдж {} рдбреНрд░реЙрдк рдХрд░рдХреЗ рдЗрд╕реЗ рд╣рд▓ рдХрд░реЗрдВред

@gaearon рдПрдХ рдкреНрд░рд╢реНрди, https://github.com/reduxjs/redux/issues/723#issuecomment -139927639 рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдпрджрд┐ рдЖрдк рдПрдХ рдХреНрд░рд┐рдпрд╛ рдХреЛ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рджреЛ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛ _AND_ рд░рд╛рдЬреНрдп рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХрд╛рд░рдг рдмрджрд▓ рдЧрдпрд╛ рд╣реИ? рдореИрдВ рдПрдХ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рд░рдЦ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпреЛрдВ рдХреЛ рднреЗрдЬрд╛ рдЧрдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди then рдЕрдВрджрд░ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ _before_ рд░рд╛рдЬреНрдп рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рд╣рдо redux-thunk рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

@enmanuelduran : Dan рдХреЛрдИ рд╕рдХреНрд░рд┐рдп рдЕрдиреБрд░рдХреНрд╖рдХ рдирд╣реАрдВ рд╣реИ - рдХреГрдкрдпрд╛ рдЙрд╕реЗ рдкрд┐рдВрдЧ рди рдХрд░реЗрдВред

рдХреЛрдб рджреЗрдЦреЗ рдмрд┐рдирд╛ рдЖрдкрдХреЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдирд╛ рдХрдард┐рди рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдореБрджреНрджреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдордВрдЪ рдмрдирдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИрдВред рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕рд╡рд╛рд▓ рдХреЛ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВ - рдЖрдкрдХреЛ рд╡рд╣рд╛рдВ рдмреЗрд╣рддрд░ рдЙрддреНрддрд░ рдорд┐рд▓рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рддреЗрдЬреА рд╕реЗред

@markersonson рдУрд╣, рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдпрд╣ рдореЗрд░рд╛ рдЙрджреНрджреЗрд╢реНрдп рдирд╣реАрдВ рдерд╛, рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛ рддреЛ https://stackoverflow.com/questions/51846612/dispatch-an-action-after-other-pecific-actions-were- рднреЗрдЬрд╛ рдФрд░ рд░рд╛рдЬреНрдп рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди

рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж рджреЛрд╕реНрддреЛрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

CellOcean picture CellOcean  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

elado picture elado  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

timdorr picture timdorr  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

olalonde picture olalonde  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

cloudfroster picture cloudfroster  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ