promise를 다루려면 먼저 promise를 만들어야한다.
먼저 api폴더 내부에 posts.js 파일을 생성하여 api를 만든다.
const sleep = n => new Promise(resolve => setTimeout(resolve, n))
//{ id, title, body }
const posts = [
{
id: 1,
title: '뭐요',
body:'리덕스 미들웨어'
},
{
id: 2,
title: '첨봐요?',
body:'redux-thunk를 써서 비동기 작업'
},
{
id: 3,
title: 'redux-saga사용',
body:'나중에'
},
]
export const getPosts = async () => {
await sleep(500);
return posts;
}
export const getPostById = async id => {
await sleep(500);
return posts.find(post => post.id === id);
};
modules 폴더 내부에는 이를 호출하는 posts.js 파일을 생성한다.
import * as postsAPI from '../api/posts';
const GET_POSTS = 'GET_POST';
const GET_POSTS_SUCCESS = 'GET_POSTS_SUCCESS';
const GET_POSTS_ERROR = 'GET_POSTS_ERROR';
const GET_POST = 'GET_POST';
const GET_POST_SUCCESS ='GET_POST_SUCCES';
const GET_POST_ERROR ='GET_POST_ERROR';
/*thunk 생성 함수*/
export const getPosts = () => async dispatch => {
//요청시작
dispatch({type: GET_POSTS});
//api 호출
try{
const posts = await postsAPI.getPosts();
//성공한경우
dispatch({
type:GET_POSTS_SUCCESS,
posts
});
} catch(e){
//실패한 경우
dispatch({
type:GET_POSTS_ERROR,
error: e
});
}
}
export const getPost = () => async dispatch => {
//요청시작
dispatch({type: GET_POST});
//api 호출
try{
const post = await postsAPI.getPostById();
//성공한경우
dispatch({
type:GET_POST_SUCCESS,
post
});
} catch(e){
//실패한 경우
dispatch({
type:GET_POST_ERROR,
error: e
});
}
}