Ich bin neu in React und Redux.Call Rendite Put() in einem Erfolg Callback
Ich verwende react-redux, um den AWS Cognito-Dienst aufzurufen, der ein Objekt mit einem Erfolgs- und Fehlerrückruf entgegennimmt. Ich bekomme meinen JWT von AWS Cognito zurück, wenn ich console.log innerhalb meines Erfolgsrückrufs einsetze. Wie kann ich jedoch yield put()
innerhalb dieses Rückrufs, da es keine Generatorfunktion ist (function*
).
Hier einige Code:
export function* getAWSToken(){
// username, password and userPool come from react state
// not showing code for brevity.
const userData = {
Username: username,
Pool: userPool,
};
const authenticationData = {
Username : username,
Password : password,
};
const cognitoUser = new AWSCognito.CognitoIdentityServiceProvider.CognitoUser(userData);
const authenticationDetails = new AWSCognito.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData);
// This here is the callback
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess(result){
yield put(cognitoTokenObtained(result.getIdToken().getJwtToken())
},
onFailure(err){}
});
}
Warum eine Generatorfunktion verwenden? Jedes Mal, wenn Sie 'getAWSToken' aufrufen, gibt Ihnen Cognito ein neues Token, verbessert ein Generator die Dinge? –
Wie bereits erwähnt, bin ich neu zu React und Redux, also befolge ich Beispiele. Es scheint, dass überall dort, wo Redux-Saga verwendet wird, eine Generatorfunktion verwendet wird. Sollte dies nicht der Fall sein, informieren Sie bitte. –
Hmm, es scheint mir zu komplex. Sie könnten einfach eine normale Funktion verwenden, einen Callback an "getAWSToken (yourCallback)" übergeben und dann diese Funktion in 'onSuccess' wie' callback (result) 'aufrufen. Aber wenn es einen 'redux-saga'-spezifischen Grund für die Verwendung von Generatorfunktionen gibt, dann würde ich nicht etwas vorschlagen wollen, das' redux-saga 'bricht. –