首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RxJS &RxJS:如何异步转换值?

RxJS &RxJS:如何异步转换值?
EN

Stack Overflow用户
提问于 2017-12-07 19:28:00
回答 1查看 2.1K关注 0票数 2

我想对一个可观察到的值应用一个异步转换函数。

代码语言:javascript
复制
@Injectable
export class ApiService{
    constructor(private http: HttpClient){}

    getSomething(url): Observable<any>{
        return this.http.get(url);
    }
}

在上面的代码中,我想对由myFunc发出的值应用一个转换函数myFunc,它返回一个允诺。

通常,我会使用RxJS的map操作符,但是由于转换函数返回一个承诺,所以我无法找到处理它的方法。

例如,让我的函数是:

代码语言:javascript
复制
function myFunc(value){
    return new Promise((resolve, reject) => {
        // modify the value async

        resolve(modifiedValue);

        // ...
    });
}

是否有适当的方法来处理这个任务?我觉得下面这个不合适,对吗?

return this.http.get(url).map(myFunc);

任何帮助都将不胜感激。

注:--我使用的是RxJS 5.5.2

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-07 19:33:23

使用mergeMap操作符接收响应值,通过另一个可观察的操作异步执行一些修改,然后返回修改后的值。该操作符将HttpClient发出的值与可观察的修饰符合并,并返回一个可观察到的值。

编辑:包含@bygrace评论中的Observable.fromPromise位,以获得更完整的答案。

编辑:用于RxJs v5.5+

代码语言:javascript
复制
import { pipe } from 'rxjs/util/pipe';
import { mergeMap } from 'rxjs/operators';


    @Injectable
    export class ApiService{
        constructor(private http: HttpClient){}

        getSomething(url): Observable<any>{
            return this.http.get(url).pipe( 
                                        mergeMap(myFunc) 
                                      );
        }

        private myFunc(x): Observable<any> {
            // do some asynchronous modification that returns an Observable
            return Observable.fromPromise(x);
        }
    }

Pre RxJs v5.5

代码语言:javascript
复制
@Injectable
export class ApiService{
    constructor(private http: HttpClient){}

    getSomething(url): Observable<any>{
        return this.http.get(url)
               .mergeMap(data => {
                   // do some asynchronous modification that returns an Observable
                   return Observable.fromPromise(data);
                });
    }
}

请参阅:http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-mergeMap

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47702400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档