我對合并多個 API 請求的 MergeMap 方法非常陌生。我已經關注并閱讀了本教程如何做到這一點。
https://levelup.gitconnected.com/handle-multiple-api-requests-in-angular-using-mergemap-and-forkjoin-to-avoid-nested-subscriptions-a20fb5040d0c
這是我從 API 獲取資料的代碼:
服務.ts
getPriceList(): Observable<Price[]> {
this.http.get<Price[]>(this.baseUrl).pipe(
map( priceId => {
const id = priceId[0];
this.priceId = id.id;
return id;
}),
mergeMap( Id=> this.http.get(this.baseUrl2 /${Id.id})),
).subscribe( productPrices => {
this.productPrices = productPrices;
});
}
我需要第一個中的所有資料baseUrl,但我分配了 Id 以在我的第二個 api 請求中使用它。我在home.ts中這樣呼叫這個方法:
this.dataService.getPriceList().subscribe(response => {
console.log(response);
this.priceListData = response;
在檔案中呼叫此方法時沒有錯誤。
錯誤出在Service.ts的方法中
宣告型別既不是“void”也不是“any”的函式必須回傳一個 value.ts(2355)
我在第一個 api 請求中使用了return陳述句。
我試過這個解決方案:
宣告型別既不是“void”也不是“any”的函式必須回傳一個值
然后我收到以下錯誤:
型別 'Subscription' 缺少來自型別 'Observable<Crypto[]>' 的以下屬性:_isScalar、source、operator、lift 和 6 more.ts(2740)
如何在 Angular 11 / ionic 6 中正確使用 MergeMap?
uj5u.com熱心網友回復:
我認為你應該在 getPriceList 上回傳一些東西,但你沒有,如果你在 getPriceList 中訂閱,之后就沒有可觀察的訂閱了
getPriceList(): Observable<Price[]> {
return this.http
.get<Price[]>(this.baseUrl)
.pipe(
map(priceId => {
const id = priceId[0];
this.priceId = id.id;
return id;
}),
mergeMap(id => this.http.get(`this.baseUrl2${id.id}`))
)
}
和電話
this.dataService.getPriceList().subscribe(response => {
console.log(response);
this.priceListData = response;
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/457035.html
上一篇:如何在TSX中有條件地渲染道具
下一篇:在雙冒號之前提取文本
