【发布时间】:2019-09-20 11:09:49
【问题描述】:
我在使用订阅和可观察时遇到问题
这是我的代码
这是我的 inventory.service.ts
getInventoryList = (page: string,pageSize,size) => {
const userLocation = this.authService.getUserLocation();
let queryParams = `?page=${page}&loc=${userLocation}&size=${size}&pageSize=${pageSize}`;
this.http
.get<{ success: boolean, message: string, inventoryList: any }>(BACKEND_URL_item + '/getInventoryList' + queryParams)
.pipe(retry(3), catchError((data) => {
return EMPTY;
}),map((data) => {
if (page === 'inventory') {
return {
extractedInventoryList: data.inventoryList.map((item: any) => {
return {
itemId: item._id,
itemID: item.itemID,
itemName: item.itemName,
itemSellingPrice: item.itemSellingPrice,
itemPurchasePrice: item.itemPurchasePrice,
itemAveragePurchasePrice: item.itemAveragePurchasePrice,
itemBaseUnit: item.itemBaseUnit,
itemCategory: item.itemCategory,
itemReorderPoint: item.itemReorderPoint,
itemTotalQuantity: item.itemTotalQuantity,
itemSumQuantity: item.itemSumQuantity,
itemLocation: item.itemLocation,
itemSubLocation: item.itemSubLocation
};
}),
success: data.success,
message: data.message
};
} else {
return {
extractedInventoryList: data.inventoryList.map((item: any) => {
return {
itemId: item._id,
itemName: item.itemName,
itemTotalQuantity: item.itemTotalQuantity,
itemLocation: item.itemLocation,
itemSubLocation: item.itemSubLocation
};
}),
success: data.success,
message: data.message
};
}
}))
.subscribe((transformedData) => {
this.inventoryList = transformedData.extractedInventoryList;
this.inventoryListObserver.next({
inventoryList: [...this.inventoryList],
success: transformedData.success,
message: transformedData.message
});
}
});
}
getInventoryListListener = () => {
return this.inventoryListObserver.asObservable();
}
这是我的 inventory.component.ts
getInventoryItem(pageSize,size) {
for(let x=0;x<size;x= x+10){
this.inventoryService.getInventoryList('inventory',pageSize,x);
this.itemListSubscription = this.inventoryService
.getInventoryListListener()
.subscribe((responseData: { inventoryList: IItem[], success: boolean, message: string }) => {
if (!responseData.success) {
this.spinner.stop();
} else {
this.itemList = this.itemList.concat(responseData.inventoryList);
this.spinner.stop();
this.itemListBackup = this.itemList;
}
this.showToasts(responseData.message, responseData.success);
});
}
}
我正在尝试每 10 个项目获取数据。我正在使用 mongodb,它返回的正是我想要的,但是当我通过 Angular 获取它时,它会在 itemList 中插入一些重复的数组
谁能解释这是为什么?
【问题讨论】:
标签: angular observable httprequest subscription angular-http