在redux-saga中的承诺

Min*_*oon 8 promise reactjs redux redux-saga

我在这里找到了同样的问题,但我没有找到合适的答案.

我正在使用CRUD操作开发一个简单的应用程序.在编辑页面上,在组件被挂载(componentDidMount())之后,应用程序将调度操作以检索特定的帖子详细信息:

dispatch({ type: FETCH_POST, id: 'post-id' })
Run Code Online (Sandbox Code Playgroud)

我正在使用redux-saga并希望上面的调用返回一个Promise,以便我可以访问API响应.

现在,没有回调/承诺,我最终在商店中定义了一个新状态(比如post_edited)并将其连接/映射到组件中的道具以进行编辑页面.

处理这种情况的最佳方法是什么?

juk*_*ben 14

您能否提供有关您的问题的更多信息?我不确定我是否理解你的问题,但通常的做法是:

API.js

function apiCallToFetchPost(id) {
  return Promise.resolve({name: 'Test});
}
Run Code Online (Sandbox Code Playgroud)

postSaga.js

function* fetchPostSaga({id}) {
  try {
    const request = yield call(apiCallToFetchPost, id);
    // -> in post reducer we will save the fetched data for showing them later 
    yield put({type: FETCH_POST_SUCCESS, payload: request}); 
  } catch (error) {
    yield put({type: FETCH_POST_SUCCESS_FAILURE, error})
  }
}

export function* onBootstrap() {
  yield takeLatest(FETCH_POST, fetchPostSaga);
}
Run Code Online (Sandbox Code Playgroud)