产品微服务出现故障,不返回值的情况如何处理?
async getStats(productId: string) {
const existedProduct = await firstValueFrom(
this.productClient.send('get_product', { productId })
);
if (!existedProduct) {
throw new NotFoundException('Продукт не найден');
}
const avgRatingData = await this.prismaService.review.aggregate({
where: { productId },
_avg: {
rate: true
}
});
const reviewsCount = await this.prismaService.review.count({
where: { productId }
});
const avgRating = avgRatingData._avg.rate ? Number(avgRatingData._avg.rate.toFixed(2)) : 0;
return {
stats: {
productId,
avgRating,
reviewsCount
}
};
}
问题是如果产品服务失败,这段代码会等待响应,直到再次开启
const existedProduct = await firstValueFrom(
this.productClient.send('get_product', { productId })
);
我决定如下:
const existedProduct = await firstValueFrom(
this.productClient.send('get_product', { productId }).pipe(timeout(1000))
).catch(error => {
console.log(error.message);
return null;
});