【问题标题】:Use Observable for AWS cognito callback使用 Observable 进行 AWS cognito 回调
【发布时间】:2017-06-14 23:15:12
【问题描述】:

如何将注册回调转换为符合 Angular 2 约定的 Observable?回调结构是这样的

userPool.signUp(this.artist.email, this.artist.password, attributeList, null, function(err, result) {
  if (err) {
    alert(err);
    return;
  }
  let cognitoUser = result.user;
  console.log(JSON.stringify(result));
  console.log('user name is ' + cognitoUser.getUsername());
});

【问题讨论】:

    标签: javascript amazon-web-services angular rxjs amazon-cognito


    【解决方案1】:

    为此目的,有一个 RxJS 静态运算符:bindNodeCallback。它将 Node 风格的回调 API 转换为返回 Observable 的函数。

    你会这样使用它:

    import { Observable } from 'rxjs/Observable';
    import 'rxjs/add/observable/bindNodeCallback';
    
    let signInAsObservable = Observable.bindNodeCallback(
      userPool.signUp.bind(userPool)
    );
    let observable = signInAsObservable(
      this.artist.email,
      this.artist.password,
      attributeList,
      null
    );
    observable.subscribe(
      result => {
        let cognitoUser = result.user;
        console.log(JSON.stringify(result));
        console.log('user name is ' + cognitoUser.getUsername());
      },
      error => alert(error)
    );
    

    请注意,您需要调用bindsignUp 绑定到userPool

    【讨论】:

    • 不知何故这种方法对我不起作用。我将回调转换为 Promise,然后检查是否可以使用 fromPromise 方法将 Promise 转换为 observable。
    • 你救了我的命。
    【解决方案2】:

    如果不定义类型,绑定将无法工作。

    要使其正常工作,请尝试以下操作:

    register(user: RegistrationUser): Observable<any> {
      let attributeList = [];
    
      let dataEmail = {
        Name: 'email',
        Value: user.email
      };
      let dataNickname = {
        Name: 'nickname',
        Value: user.name
      };
      attributeList.push(new CognitoUserAttribute(dataEmail));
      attributeList.push(new CognitoUserAttribute(dataNickname));
    
      let signUp = Observable.bindNodeCallback<string, string, any[], any[], any>(this.userPool.signUp.bind(this.userPool));
    
      return signUp(user.email, user.password, attributeList, null);
    }
    

    【讨论】:

      猜你喜欢
      • 2017-05-29
      • 2018-03-14
      • 2018-11-04
      • 2021-04-28
      • 2019-06-19
      • 2019-10-04
      • 2021-07-16
      • 1970-01-01
      • 2021-10-01
      相关资源
      最近更新 更多