2016-06-01 2 views
2

Я занимаюсь асинхронным ожиданием в ответном режиме, делая асинхронную отправку. Есть ли что-то неправильное или проблематичное при отправке асинхронной отправки, как показано ниже? Кажется, что это работает (кроме полинаполнения). Если в этом подходе нет ничего плохого, я думаю, что это может сработать очень хорошо для реагирования.Использование асинхронного ожидания при отправке

export function fetchData(date, lng, lat){ 
    const {year, month} = date; 
    return async(dispatch) => { 
    dispatch(requestData()) 
    try { 
     const data = await request(`http://data.police.uk/api/crimes-street/all-crime?lat=${lat}&lng=${lng}&date=${year}-${month}`) 
     dispatch(recieveData(data)) 
    } catch (err) { 
     dispatch(requestError(err)) 
    } 
    } 
} 

ответ

2

Это должно работать достаточно хорошо (если у вас есть в вашем redux-thunk промежуточного слоя). Я использую аналогичный подход (с обещаниями, а не async/await) в нескольких приложениях React/Redux.

Также есть redux-promise, но я считаю это недостаточным по двум причинам: нет действия «начать», и нет никакого способа установить meta, что часто необходимо для асинхронных действий. Поэтому я предпочитаю отправлять действия явно, а не обещания, как это делает ваш код.

1

Я использую этот шаблон:

const result = (res) => { 
     if (!res.result) { 
      this.setState({ 
      ...this.state, 
      Valid: false 
      }); 
     } 
     }; 


AsyncFn(this.props.dispatch, field , result); 



export async function AsyncFn(dispatch, field, Callback) { 
    try { 
    const response = await (
     request.post(url) 
    ); 

    if (response && response.body) { 
     if (response.body.result) { 
     dispatch(Auth()); 
     dispatch(openModal()); 
     } else { 
     Callback(response.body); 
     } 
    } else { 
     Callback({ result: false, message: 'Not valid' }); 
    } 
    } catch (err) { 
    Callback({ result: false, message: err.message }); 
    } 
} 
Смежные вопросы