Sri*_*C G 7 async-await es6-promise react-native
verifyUser等待verifyUserSignInSuccess等待的userSnapshot等待等待user
这里有两个函数,它们在ReactNative应用程序的正确性,内存,时间方面会更有效:
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));
}
};
}
Run Code Online (Sandbox Code Playgroud)
或嵌套异步等待:
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));
}
};
}
Run Code Online (Sandbox Code Playgroud)
根据文档,该onAuthStateChanged()函数返回
观察者的取消订阅功能。
所以你可以:
var unsubscribe = firebase.auth().onAuthStateChanged((user) {
// handle it for changes signed in, signed out, or when the user's ID token changed in situations such as token expiry or password change
});
Run Code Online (Sandbox Code Playgroud)
进而:
unsubscribe();用于注册观察者。
onAuthStateChanged是一个观察者,当用户登录、注销或用户的 ID 令牌在令牌过期或密码更改等情况下发生更改时,它会调用观察者。所以第二个是最好的解决方案。每次登录或更改。
` let userRef = "/user/" + user.uid;
await firebase
.database()
.ref(userRef)
.once("value")
.then( () => {
dispatch(verifyUserSignInSuccess(userSnapshot.val()));
});
} else {
dispatch(verifyUserSignInFailure(USER_NOT_SIGNED_IN));
}`
Run Code Online (Sandbox Code Playgroud)
交叉检查用户是否有效是正确的。我不认为需要进行内存比较。
| 归档时间: |
|
| 查看次数: |
408 次 |
| 最近记录: |