【问题标题】:How to wait for return value and subscribe to it in Angular2?如何在Angular2中等待返回值并订阅它?
【发布时间】:2018-04-27 21:28:47
【问题描述】:

我在使用 Ionic 开发应用程序时遇到了问题。我正在使用数据库提供程序对数据库执行查询,这很好,但它可能被称为异步,因为我未定义。

经过一些检查和其他逻辑后,我正在从数据库中返回值:

this.databaseProvider.getValueFor(saved.id)
    .then(data => {
           return data;
    });

有什么方法可以将数据返回给 Observable 并订阅它?我对 Angular2 很陌生,并不了解所有概念。

【问题讨论】:

    标签: angular ionic2 observable subscribe


    【解决方案1】:

    您可以使用 [**Observable.fromPromise**][1] 方法将 Promise 转换为 Observable 并订阅 Observable 以从中检索数据。

    SomeMethod(){
       return Observable.fromPromise(this.databaseProvider.getValueFor(saved.id))
    }
    
    //Usage
    this.SomeMethod().subscribe(data => {
       console.log("data", data)
    })
    

    【讨论】:

    • 'Observable' 不可分配给'PromiseLike 类型的参数
    • 你好,我正在使用角度身份验证客户端 oidc this.oidcSecurityService.getUserData().subscribe();此方法由 oidc 库提供,如何等待此类订阅直到完成。我无法将其转换为 promise,因为它在库中
    【解决方案2】:

    Observables 是惰性的,因此您需要订阅它才能从中获取数据。

    this.databaseProvider.getValueFor(saved.id)
      .subscribe(data => {
           console.log(data); //response
    });
    

    getValueFor(id): Observable<any> { const url = 'http://yourAPI/'+id; return this.http.get<any>(url) .pipe( map((res: any) => res.json()), catchError(e => this.handleError(e)) ); }

    【讨论】:

    • 如果我在服务层内调用 HTTP 请求,并且需要等待请求的响应并在组件中对其进行处理,该怎么办?
    • 是的,您也可以这样做。您只需要返回 HTTP 调用的响应。看看下面的代码 sn -p getData(url): Observable&lt;any&gt; { return this.http.get&lt;any&gt;(url) .pipe( map((res: any) =&gt; res.json()), catchError(e =&gt; this.handleError(e)) ); }
    • 那么,我会像 getData(url).subscribe() 这样写订阅吗?
    猜你喜欢
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 2021-05-06
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    相关资源
    最近更新 更多