1. Khi nào dùng redux-thunk?
Trong khi làm việc với redux, không thể tránh khỏi những yêu cầu bất đồng bộ, với redux core, một action chỉ cho phép return 1 plain object. Đây là lúc ta cần dùng đến middleware - redux-thunk là một ví dụ cho trường hợp này.
2. Return a plain object là gì ? Có phải là 1 hàm trả về một object không?
Để trả lời câu hỏi trên ta xem xét ví dụ sau: 
action creator
Trong ví dụ trên, hàm fetchData thực hiện sử lý bất đồng bộ sử dụng async/await. Hàm này trả về 1 object với type và payload để dispatch lên store. Vậy đây có là cách sử dụng đúng của action trong redux?
Câu trả lời là không!
Để giải thích vì sao nó không return a plain object, ta sử dụng babel. Copy đoạn code trên vào babel, ta sẽ được 
async/await in es5
Chúng ta thấy rằng việc sử dụng async/await không hề return một object như ta viết trên editor.
3. redux-thunk sử dụng như thế nào, nó hoạt động ra sao?
redux cycle
Middleware trong redux là một hàm được gọi mỗi khi một action được dispatch, middleware được phép thay đổi, cập nhật action. Hầu hết các middleware trong redux được dùng với các mục đích xử lý bất đồng bộ, redux-thunk là một middleware như vậy!
Với việc dùng redux-thunk, action có thể returns object hoặc function.
redux-thunk cycle