2016-06-01 5 views
2

Ich bastelte herum mit async erwarten in reaktions-nativ, indem Sie den Versand asynchron machen. Ist es falsch oder problematisch, den Versand asynchron zu machen, wie unten gezeigt? Es scheint zu funktionieren (außer es ist ein Polyfill). Wenn es mit diesem Ansatz nichts falsch ist, denke ich, dass es für reactive-native durchaus nett sein könnte.Verwendung von asynchronen Warten auf Versand

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)) 
    } 
    } 
} 

Antwort

2

die ganz gut funktionieren sollte (vorausgesetzt, Sie redux-thunk in Ihrer Middleware haben). Ich verwende einen ähnlichen Ansatz (mit Versprechen statt async/await) in mehreren React/Redux-Apps.

Es gibt auch eine redux-promise, aber ich finde es aus zwei Gründen unzureichend: Es gibt keine "begin" Aktion, und es gibt keine Möglichkeit meta einzustellen, was oft für asynchrone Aktionen notwendig ist. Daher bevorzuge ich es, die Aktionen explizit anstatt der Versprechen zu versenden, wie es bei Ihrem Code der Fall ist.

1

Ich benutze dieses Muster:

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 }); 
    } 
} 
Verwandte Themen