javascript - 仅当 Angular2/ionic2 中的 Promise 得到解析时才执行 Observble

标签 javascript angular typescript ionic2

我有一个保存 token 的身份验证服务,保存 token 的结果是一个 promise 。我希望仅在 promise 解决后才将值返回到另一个函数。

这是我保存 token 的 authservice:

login(user: UserModel): Observable<any> {
    return this._http.postnoAuth(this.loginurl + "mobile-login", body)
        .map((response: Response) => {
            let token = response.json() && response.json().access_token;

            if (token){
                this._storage.set('currentUser', JSON.stringify({token: token}))
                .then(res=>{
                     return true; //return true after the promise is resolved
                });
            }
            else{
                return false;
            }
        })
    //.catch(this.handleError);
}

那么我订阅上面的内容:

this._authservice.login(this.user).subscribe(respose => {
    if(response){  //expecting true here
        console.log("true");
    }
    else{
        console.log("false");
    }
    loader.dismiss();
        this.submitted = false;
    },
    error=> {
        this.submitted = false;
    }
);

即使设置了存储值,上面的代码也总是记录 false,可能是哪里出了问题?

最佳答案

我会尝试通过 flatMap 运算符来做到这一点。 flatMap 运算符帮助我们在前一个请求完成后调用一个请求:

return this._http.get('app/test.json')
  .flatMap((response: Response) => {
    let token = response.json() && response.json().access_token;

    if (token) {
      return this._storage.set('currentUser', JSON.stringify({ token: token }))
        .then(res => {
          return true;
        });
    } else {
      return Observable.of(false);
    }
  });

不要忘记这些导入:

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/mergeMap';
import 'rxjs/add/observable/of';

<强> Plunker Example

关于javascript - 仅当 Angular2/ionic2 中的 Promise 得到解析时才执行 Observble,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42289512/

相关文章:

Angular 无法编译 Typescript 的映射类型修饰符

javascript - 如何在更新 mongo 文档时使用变量?

javascript - 如何在下拉菜单中调用 JavaScript

javascript - 将鼠标悬停在上面时闪烁的工具提示

angular - 如何正确处理和控制Angular和Web API中的错误-2

typescript - 如何在 SolidJS 中注释输入事件?

javascript - JQueryUI DatePicker 用 minDate 替换无效输入

javascript - 帮助浏览器窗口会合 window.postmessage

angular - 如何将异步数据作为对象数组传递给子组件 - angular 6

javascript - 检查指针是否与 OpenLayers 中的集群子特征相交?