我的脚本有一个登录用户的功能,如下所示:
class myClient {
SignIn() {
this._userManager.signinRedirect();
this._userManager.processSigninResponse().then(function (response) {
manager._userManager.getUser().then(function (user) {
manager._loggedUser = user;
});
})
}
}
如您所见,有两个嵌套的承诺。一旦最内部的承诺得到解决(即:manager._loggedUser = user
)
现在,我希望我的类只公开两个方法:SignIn()[如上所述]和GetUserInfo():
GetUserInfo() {
// ...
return this._loggedUser;
};
因此,任何使用我的课程的人都需要按照以下步骤来获取登录的用户个人资料:
我如何'同步'第2步和第3步,以确保在首先调用signin()方法和之后调用GetUserInfo()之后_loggedUser不为空?
答案 0 :(得分:0)
应该扁平化以避免“回调地狱”(使用承诺的原因之一) - 除非有理由不这样做(即在嵌套承诺中使用response
时)。它应该回报一个承诺。
SignIn() {
this._userManager.signinRedirect();
return this._userManager.processSigninResponse().then(function (response) {
return manager._userManager.getUser();
})
.then(function (user) {
manager._loggedUser = user;
});
}
考虑到GetUserInfo
依赖于SignIn
结果,在使用它们时应该使用承诺。
obj.SignIn().then(() => {
const info = obj.GetUserInfo();
...
});