Я хочу применить функцию асинхронного преобразования к значению, испускаемому наблюдаемым.
@Injectable
export class ApiService{
constructor(private http: HttpClient){}
getSomething(url): Observable<any>{
return this.http.get(url);
}
}
В приведенном выше коде я хочу применить функцию преобразования myFunc
, которая возвращает обещание, к значению, сгенерированному this.http.get(url)
.
Обычно я бы использовал оператор карты RxJS, но, поскольку функция преобразования возвращает обещание, я не смог найти способ с этим справиться.
Например, пусть моя функция будет:
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.
{__zone_symbol__state: true, __zone_symbol__value : x}
, где x — это то, что я ожидал, но, как вы видите, он завернут в другой объект. Я не знаю, что это за символы зон :) - person hswner   schedule 07.12.2017map
. Можете ли вы изменить функцию сопоставления, чтобы она возвращала наблюдаемую, а затем использовать операторswitchMap
вместоmap
? Кстати, почему ваша функция сопоставления асинхронна? - person bygrace   schedule 07.12.2017switchMap
. Спасибо. - person hswner   schedule 07.12.2017return this.http.get(url).switchMap(x => Observable.fromPromise(myFunc(x)));
- person bygrace   schedule 07.12.2017