gpt4 book ai didi

javascript - RxJS 和 Angular HttpClient : How to transform value asynchronously?

转载 作者:行者123 更新时间:2023-11-30 11:26:51 25 4
gpt4 key购买 nike

我想对可观察对象发出的值应用异步转换函数。

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

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

在上面的代码中,我想对 this.http.get(url) 发出的值应用一个转换函数 myFunc,它返回一个 promise 。

通常我会使用 RxJS 的 map 运算符,但由于转换函数返回一个 promise ,我找不到处理它的方法。

例如,假设我的函数是:

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

最佳答案

使用mergeMap 运算符获取响应值,通过另一个Observable 操作异步执行一些修改,然后返回修改后的值。此运算符将合并 HttpClient 和您的修饰符 Observable 发出的值,并返回发出变异值的单个 Observable。

编辑:包括来自@bygrace 评论的Observable.fromPromise 位以获得更完整的答案。

编辑:对于 RxJs v5.5+

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

@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

关于javascript - RxJS 和 Angular HttpClient : How to transform value asynchronously?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47702400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com