Я новичок в Redux Saga, исходя из Redux Thunk. В некоторых ситуациях мне нужно знать, завершился ли вызов API неудачно или успешно из представления, из которого я вызвал действие. С Redux Thunk я бы сделал что-то вроде следующего.
Мой создатель компонентов и действий будет выглядеть так:
class MyComponent extends Component {
componentDidMount() {
this.props.actions.fetchItems()
.then(result => {
if (result.status === 'OK') {
console.log('Request succeeded, take particular action in this view')
}
else {
console.log('Request failed, take other action in this view')
}
})
}
render() {
return (
<div>My view</div>
)
}
}
const mapStateToProps = (state, ownProps) => {
return {
items: state.items,
}
}
const mapDispatchToProps = dispatch => {
return {
actions: bindActionCreators({
...actions,
}, dispatch),
}
}
export default connect(
mapStateToProps,
mapDispatchToProps,
)(MyComponent)
import * as t from './actionTypes'
import {CALL_API} from '../api'
const xhrGetItems = (params) => (dispatch, getState) => {
const action = {
[CALL_API]: {
type: t.XHR_ITEMS_FETCH,
endpoint: `http://www.example.com/myendpoint`,
method: 'get',
}
}
return dispatch(action)
}
Промежуточное ПО моего API перехватывает все действия со свойством CALL_API
, использует библиотеку ajax для выполнения соответствующего вызова, а затем возвращает выполненное обещание. Мой редуктор настроен на обработку каждого из возможных состояний вызова API (успех, сбой, ожидание). Все это время я все еще могу проверить результат звонка в моем представлении, где он произошел.
Итак, мой вопрос: как это можно сделать с помощью Redux Saga? Прямо сейчас мое промежуточное ПО Saga API делает все, что должно, но когда я вызываю fetchItems()
, на мой взгляд, результатом является простой объект JS, поэтому я не могу проверить, удалось ли это.
Возможно, я тоже делаю это совершенно неправильно. Любые предложения очень ценятся.