File tree Expand file tree Collapse file tree 2 files changed +43
-0
lines changed
Expand file tree Collapse file tree 2 files changed +43
-0
lines changed 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,24 @@ describe("Service", () => {
203203 await server . unadvertise ( ) ;
204204 expect ( server . isAdvertised ) . toBe ( false ) ;
205205 } ) ;
206+
207+ it ( "Successfully call /rosapi/get_time with an async return" , async ( ) => {
208+ const emptyRequest = { } ;
209+
210+ const getTimeService = new Service <
211+ typeof emptyRequest ,
212+ {
213+ time : { sec : number ; nanosec : number } ;
214+ }
215+ > ( {
216+ ros,
217+ serviceType : "rosapi_msgs/srv/GetTime" ,
218+ name : "/rosapi/get_time" ,
219+ } ) ;
220+
221+ const response = await getTimeService . callServiceAsync ( emptyRequest ) ;
222+
223+ expect ( response . time . sec ) . toBeDefined ( ) ;
224+ expect ( response . time . nanosec ) . toBeDefined ( ) ;
225+ } ) ;
206226} ) ;
You can’t perform that action at this time.
0 commit comments