0

我的脚本具有如下登录用户的功能:

class myClient {
    SignIn() {
            this._userManager.signinRedirect();      

            this._userManager.processSigninResponse().then(function (response) {               

                manager._userManager.getUser().then(function (user) {
                    manager._loggedUser = user;
                });        
            })
        }
}

如您所见,有两个嵌套的 Promise。用户只有在解决了最里面的承诺后才登录系统(即manager._loggedUser = user:)

现在,我希望我的班级只公开两种方法:SignIn() [如上所述] 和 GetUserInfo():

GetUserInfo() {
     // ...
    return this._loggedUser;
}; 

因此,任何使用我的班级的人都只需要按照以下步骤来获取登录的用户个人资料:

  1. 创建对象
  2. 调用登录方法
  3. 获取用户信息

我如何“同步”第二步和第三步,以确保在首先调用 signin() 方法和之后调用 GetUserInfo() 后 _loggedUser 不为空?

4

1 回答 1

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结果,当它们一起使用时应该使用 Promise。

obj.SignIn().then(() => {
  const info = obj.GetUserInfo();
  ...
});
于 2017-05-15T09:45:20.647 回答