verifyUser
który czeka verifyUserSignInSuccess
który czeka userSnapshot
który czeka user
W ReactNative, która metoda Async Await jest lepsza w tych dwóch przypadkach i dlaczego?
Tu, w tych dwóch funkcji, które będą bardziej efektywne pod względem poprawności, pamięć, czas na ReactNative aplikacji:
export function verifyUser() {
return async dispatch => {
dispatch(verifyUserSignInRequest());
try {
const user = await firebase.auth().onAuthStateChanged();
if (user) {
let userRef = "/user/" + user.uid;
const userSnapshot = await firebase
.database()
.ref(userRef)
.once("value");
dispatch(verifyUserSignInSuccess(userSnapshot.val()));
} else {
dispatch(verifyUserSignInFailure(USER_NOT_SIGNED_IN));
}
} catch (e) {
dispatch(verifyUserSignInFailure(e.message));
}
};
}
Or zagnieżdżonego Async Oczekuje:
export function verifyUser() {
return async dispatch => {
dispatch(verifyUserSignInRequest());
try {
await firebase.auth().onAuthStateChanged(async user => {
if (user) {
let userRef = "/user/" + user.uid;
await firebase
.database()
.ref(userRef)
.once("value")
.then(() => {
dispatch(verifyUserSignInSuccess(userSnapshot.val()));
});
} else {
dispatch(verifyUserSignInFailure(USER_NOT_SIGNED_IN));
}
});
} catch (e) {
dispatch(verifyUserSignInFailure(e.message));
}
};
}
Myślę, że pierwsza opcja jest lepsza, ponieważ łatwiej jest czytać. Nie używałbym async/czekam, ale zamiast tego obiecuję. Druga to mieszanka asynchronicznej/oczekującej obietnicy, która sprawia, że trochę trudniej ją odczytać. Moim zdaniem, złapałbym obietnicę, żeby była czysta i miła :) – parohy
Pierwsza jest bardziej czytelna, przekreśla blok "if (user)/else". – Damon