UNPKG

wistroni40-bnft

Version:

Benefit platform parameters publish job template

69 lines (64 loc) 1.87 kB
/** * 專案名稱: @wistroni40/bnft * 部門代號: ML8100 * 檔案說明: HTTP拋送者 * @CREATE Mon Feb 08 2021 上午9:54:03 * @author Steve Y Lin * @contact Steve_Y_Lin@wistron.com #1342 * ----------------------------------------------------------------------------- * @NOTE */ import { Subject } from 'rxjs'; import { ProducerAdapter, RetryOption } from 'wistroni40-retry/lib'; import { HttpAdapter } from '../../http'; import { Log4js } from './../../logger'; import { ProducePayloadModel } from './models'; /** * HTTP拋送者 */ export class HttpProducer extends ProducerAdapter<HttpAdapter> { /** * 日誌 */ private readonly logger = new Log4js('system'); /** * 送出數據完畢 */ public sendCompleted = new Subject<{ error: any; result: ProducePayloadModel<any>; }>(); /** * @param http HTTP請求 * @param options 重拋配置 */ constructor(protected http: HttpAdapter, protected options?: RetryOption) { super(http, options); } /** * 發送數據 * * @method public * @param payload 要拋送的數據 * @param callback 拋送後的回乎函數 */ public async send<T>( payload: ProducePayloadModel<T>, callback: (error: any, result: any) => void, ): Promise<void> { try { const result = await this.http .post(payload.url, payload.data) .toPromise(); this.logger.trace('send payload successfully'); this.logger.trace(JSON.stringify(payload)); this.sendCompleted.next({ error: null, result: payload }); callback(null, result); } catch (error) { this.logger.error('send payload failed'); this.logger.error(error); this.sendCompleted.next({ error, result: payload }); callback(error, null); } } }