在这里和许多其他网站上找到了之前的大量相关问题后,我仍然不明白我是否正在用以下代码编写反模式:
function signUp(email: string, password: string): Observable<UserCredential> {
return from(
createUserWithEmailAndPassword(email, password).then(
(authRes) => {
createNewUserDocument(authRes);
return authRes;
}
)
);
}
createNewUserDocument是一个异步函数。重点是,我想在用户注册后调用它,我想返回一个observable UserData>,不是Observable<Promise<>),因此我不能使注册函数异步,只使用2等待调用顺序。
另外,我应该把async之前,然后的处理程序和等待createNewUserDocument调用之前,还是没有必要?(代码似乎可以正常工作)
好吧,不管是不是反模式,如果您的意图是等待createNewUserDocument
,它不起作用。你也没有处理它的错误。
我应该把
async
放在then
的处理器之前,await
放在createNewUserDocument
调用之前吗
是的,那可以。然而,将async
/await
与then
混合是奇怪的。如果您已经想要使用await
,请在可能的情况下使用它来代替每个then
调用:
function signUp(email: string, password: string): Observable<UserCredential> {
async function create() {
const authRes = await createUserWithEmailAndPassword(email, password);
await createNewUserDocument(authRes);
return authRes;
}
return from(create());
}
如果你只想使用.then()
,链接仍然有效:
function signUp(email: string, password: string): Observable<UserCredential> {
return from(
createUserWithEmailAndPassword(email, password).then(authRes => {
return createNewUserDocument(authRes).then(() => {
return authRes;
});
})
);
}
如果createNewUserDocument
为authRes
返回了一个promise,那么内部的.then()
可能就没有必要了。