【发布时间】:2018-05-24 18:24:47
【问题描述】:
verifyUser等待verifyUserSignInSuccess等待userSnapshot等待user
这里在这两个函数中,对于ReactNative app在正确性、内存、时间方面会更有效:
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));
}
};
}
或者嵌套的异步等待:
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));
}
};
}
【问题讨论】:
-
我认为第一个选项更好,因为更容易阅读。我不会使用 async/await,而是使用 Promise。第二个是 async/await 承诺的混合,这使得它有点难以阅读。我的意见是,我会用链式 Promise 让它干净又漂亮:)
-
第一个更具可读性,比
if (user) / else块突出。
标签: react-native async-await es6-promise