1- import { NatsConnection , headers , Subscription } from 'nats' ;
2- import { GenerateUUIDv4 } from '@guardian/interfaces' ;
3- import { ZipCodec } from './zip-codec.js' ;
4- import { IMessageResponse } from '../models/index.js' ;
1+ import { NatsConnection , headers , Subscription } from 'nats' ;
2+ import { GenerateUUIDv4 } from '@guardian/interfaces' ;
3+ import { ZipCodec } from './zip-codec.js' ;
4+ import { IMessageResponse } from '../models/index.js' ;
55
66type CallbackFunction = ( body : any , error ?: string , code ?: number ) => void ;
77
88class MessageError extends Error {
99 public code : number ;
10+
1011 constructor ( message : any , code ?: number ) {
1112 super ( message ) ;
1213 this . code = code ;
@@ -107,6 +108,7 @@ export abstract class NatsService {
107108 */
108109 public subscribe ( subject : string , cb : Function ) : Subscription {
109110 const sub = this . connection . subscribe ( subject ) ;
111+
110112 const fn = async ( _sub : Subscription ) => {
111113 for await ( const m of _sub ) {
112114 try {
@@ -124,19 +126,24 @@ export abstract class NatsService {
124126 * Send message
125127 * @param subject
126128 * @param data
129+ * @param isResponseCallback
127130 */
128- public sendMessage < T > ( subject : string , data ?: unknown ) : Promise < T > {
131+ public sendMessage < T > ( subject : string , data ?: unknown , isResponseCallback : boolean = true ) : Promise < T > {
129132 const messageId = GenerateUUIDv4 ( ) ;
130133 return new Promise ( async ( resolve , reject ) => {
131134 const head = headers ( ) ;
132135 head . append ( 'messageId' , messageId ) ;
133- this . responseCallbacksMap . set ( messageId , ( body : T , error ?: string , code ?: number ) => {
134- if ( error ) {
135- reject ( new MessageError ( error , code ) ) ;
136- } else {
137- resolve ( body ) ;
138- }
139- } )
136+ if ( isResponseCallback ) {
137+ this . responseCallbacksMap . set ( messageId , ( body : T , error ?: string , code ?: number ) => {
138+ if ( error ) {
139+ reject ( new MessageError ( error , code ) ) ;
140+ } else {
141+ resolve ( body ) ;
142+ }
143+ } )
144+ } else {
145+ resolve ( null ) ;
146+ }
140147
141148 this . connection . publish ( subject , await this . codec . encode ( data ) , {
142149 reply : this . replySubject ,
@@ -155,7 +162,9 @@ export abstract class NatsService {
155162 return Promise . race ( [
156163 this . sendMessage < T > ( subject , data ) ,
157164 new Promise < T > ( ( _ , reject ) => {
158- setTimeout ( ( ) => { reject ( new Error ( 'Timeout exceed' ) ) } , timeout )
165+ setTimeout ( ( ) => {
166+ reject ( new Error ( 'Timeout exceed' ) )
167+ } , timeout )
159168 } )
160169 ] )
161170 }
@@ -206,7 +215,7 @@ export abstract class NatsService {
206215 }
207216 // head.append('rawMessage', isRaw);
208217 if ( ! noRespond ) {
209- msg . respond ( await this . codec . encode ( await cb ( await this . codec . decode ( msg . data ) , msg . headers ) ) , { headers : head } ) ;
218+ msg . respond ( await this . codec . encode ( await cb ( await this . codec . decode ( msg . data ) , msg . headers ) ) , { headers : head } ) ;
210219 } else {
211220 cb ( await this . codec . decode ( msg . data ) , msg . headers ) ;
212221 }
0 commit comments