中间件的洋葱模型

    1. A middleware1 开始
    2. C middleware2 开始
    3. E middleware3 开始
    4. ======= G =======
    5. F middleware3 结束
    6. D middleware2 结束
    7. B middleware1 结束

    下面是该请求的示意图:

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <script src="//cdn.bootcss.com/redux/3.5.2/redux.min.js"></script>
    5. </head>
    6. <body>
    7. <script>
    8. function middleware1(store) {
    9. return function(next) {
    10. return function(action) {
    11. console.log('A middleware1 开始');
    12. next(action)
    13. console.log('B middleware1 结束');
    14. };
    15. };
    16. }
    17. function middleware2(store) {
    18. return function(action) {
    19. next(action)
    20. console.log('D middleware2 结束');
    21. };
    22. };
    23. }
    24. function middleware3(store) {
    25. return function(next) {
    26. return function(action) {
    27. console.log('E middleware3 开始');
    28. next(action)
    29. console.log('F middleware3 结束');
    30. };
    31. };
    32. }
    33. function reducer(state, action) {
    34. if (action.type === 'MIDDLEWARE_TEST') {
    35. console.log('======= G =======');
    36. }
    37. return {};
    38. }
    39. var store = Redux.createStore(
    40. reducer,
    41. Redux.applyMiddleware(
    42. middleware2,
    43. )
    44. );
    45. store.dispatch({ type: 'MIDDLEWARE_TEST' });
    46. </script>
    47. </body>
    48. </html>

    下面是该请求的示意图:

    1. --------------------------------------
    2. | middleware1 |
    3. | ---------------------------- |
    4. | | middleware2 | |
    5. | | ------------------- | |
    6. | | | middleware3 | | |
    7. | | | | | |
    8. next next next ——————————— | | |
    9. dispatch —————————————> | reducer | 收尾工作->|
    10. nextState <————————————— | G | | | |
    11. | A | C | E ——————————— F | D | B |
    12. | | | | | |
    13. | | ------------------- | |
    14. | ---------------------------- |
    15. --------------------------------------
    16. 顺序 A -> C -> E -> G -> F -> D -> B
    17. \---------------/ \----------/
    18. 更新 state 完毕 收尾工作