File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -96,6 +96,29 @@ export default class Service<
9696 timeout : timeout ,
9797 } ) ;
9898 }
99+
100+ /**
101+ * Wrapper of callService that returns a modern Promise-based interface for use with async/await.
102+ * @see callService
103+ * @param request - The service request to send.
104+ * @param [timeout] - Optional timeout, in seconds, for the service call. A non-positive value means no timeout.
105+ * If not provided, the rosbridge server will use its default value.
106+ */
107+ callServiceAsync ( request : TRequest , timeout ?: number ) : Promise < TResponse > {
108+ return new Promise < TResponse > ( ( resolve , reject ) => {
109+ this . callService (
110+ request ,
111+ ( res ) => {
112+ resolve ( res ) ;
113+ } ,
114+ ( err ) => {
115+ reject ( new Error ( err ) ) ;
116+ } ,
117+ timeout ,
118+ ) ;
119+ } ) ;
120+ }
121+
99122 /**
100123 * Advertise the service. This turns the Service object from a client
101124 * into a server. The callback will be called with every request
Original file line number Diff line number Diff line change @@ -203,4 +203,31 @@ describe("Service", () => {
203203 await server . unadvertise ( ) ;
204204 expect ( server . isAdvertised ) . toBe ( false ) ;
205205 } ) ;
206+
207+ it ( "Successfully call a service with an asynchronous return" , async ( ) => {
208+ const server = new Service <
209+ undefined ,
210+ { success : boolean ; message : string }
211+ > ( {
212+ ros,
213+ serviceType : "std_srvs/Trigger" ,
214+ name : "/test_service" ,
215+ } ) ;
216+ await server . advertise ( ( _request , response ) => {
217+ response . success = true ;
218+ response . message = "bar" ;
219+ return true ;
220+ } ) ;
221+ const client = new Service ( {
222+ ros,
223+ serviceType : "std_srvs/Trigger" ,
224+ name : "/test_service" ,
225+ } ) ;
226+ const response = await client . callServiceAsync ( { } ) ;
227+
228+ expect ( response ) . toEqual ( {
229+ success : true ,
230+ message : "bar" ,
231+ } ) ;
232+ } , 10_000 ) ;
206233} ) ;
You can’t perform that action at this time.
0 commit comments