promise.then内部的异步操作;反模式?



在这里和许多其他网站上找到了之前的大量相关问题后,我仍然不明白我是否正在用以下代码编写反模式:

function signUp(email: string, password: string): Observable<UserCredential> {
return from(
createUserWithEmailAndPassword(email, password).then(
(authRes) => {
createNewUserDocument(authRes);
return authRes;
}
)
);
}

createNewUserDocument是一个异步函数。重点是,我想在用户注册后调用它,我想返回一个observable UserData>,不是Observable<Promise&lt>),因此我不能使注册函数异步,只使用2等待调用顺序。

另外,我应该把async之前,然后的处理程序和等待createNewUserDocument调用之前,还是没有必要?(代码似乎可以正常工作)

好吧,不管是不是反模式,如果您的意图是等待createNewUserDocument,它不起作用。你也没有处理它的错误。

我应该把async放在then的处理器之前,await放在createNewUserDocument调用之前吗

是的,那可以。然而,将async/awaitthen混合是奇怪的。如果您已经想要使用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;
});
})
);
}

如果createNewUserDocumentauthRes返回了一个promise,那么内部的.then()可能就没有必要了。

最新更新