Ionic 2 在返回之前检查 observable

Posted

技术标签:

【中文标题】Ionic 2 在返回之前检查 observable【英文标题】:Ionic 2 inspect observable before returning it 【发布时间】:2017-06-27 06:23:20 【问题描述】:

我是 Ionic 和 Angular 的新手,并且拥有多年的 .NET 开发经验。我正在网上尝试一些示例来使用 Ionic 2 构建登录原型。

我让 WebAPI 在后台工作,只是根据传递的凭据是否正确返回 JSON 真或假。

我的身份验证提供程序如下所示:

  public login(credentials) 
    if (credentials.email === null || credentials.password === null) 
      return Observable.throw("Please insert credentials");
     else 

        this.result = this.http.post(this.CONST.APIUrl, JSON.stringify(credentials), new RequestOptions(headers: this.contentHeader)).map(res => res.json())

        if (this.result)
        
            this.currentUser = new User('Simon', 'saimon@devdactic.com');  
        

        return this.result;

  

登录页面如下所示:

public login() 
    this.showLoading()
    this.auth.login(this.registerCredentials).subscribe(allowed => 
      if (allowed) 
        setTimeout(() => 
        this.loading.dismiss();
        this.nav.setRoot(HomePage)
        );
       else 
        this.showError("Access Denied");
      
    ,
    error => 
      this.showError(error);
    );
  

目前它总是让用户登录。我知道这是因为 this.result 总是有价值的。但是在允许用户登录之前,我如何检查从 API 返回的数据?

【问题讨论】:

【参考方案1】:

您可以使用Observable.do 为 Observable 创建副作用

在登录功能中:

public login(credentials) 
    if (credentials.email === null || credentials.password === null) 
      return Observable.throw("Please insert credentials");
     else 

        this.result = this.http.post(this.CONST.APIUrl,
          JSON.stringify(credentials), new RequestOptions(headers: this.contentHeader))
           .map(res => res.json())
           .do(userData=>
               //check userData and set current user
               this.currentUser = new User('Simon', 'saimon@devdactic.com');
               return userData;//make sure to return the value to subscribe  
           );
   return result;
  

【讨论】:

以上是关于Ionic 2 在返回之前检查 observable的主要内容,如果未能解决你的问题,请参考以下文章

html 使用AJAX POST请求来调用控制器操作(在页面加载时和在下拉列表中选择项目时),获取返回的布尔值,设置observabl

Ionic SQLite -- 检查数据库是不是存在

原创Ionic单页应用跳转外链,构造路由返回的解决办法及代码

在 Angular 2、Ionic 2 中返回一个承诺值

ionic 打包安卓包

如何在 Ionic 2 或 3 应用程序中加载实际图像之前显示占位符图像