@@ -263,6 +263,40 @@ export type TaskRunResult<TOutput = any> =
263
263
error : unknown ;
264
264
} ;
265
265
266
+ export class SubtaskUnwrapError extends Error {
267
+ constructor ( taskId : string , subtaskError : unknown ) {
268
+ if ( subtaskError instanceof Error ) {
269
+ super ( `Error in ${ taskId } : ${ subtaskError . message } ` , { cause : subtaskError } ) ;
270
+ this . name = "SubtaskUnwrapError" ;
271
+ } else {
272
+ super ( `Error in ${ taskId } ` , { cause : subtaskError } ) ;
273
+ this . name = "SubtaskUnwrapError" ;
274
+ }
275
+ }
276
+ }
277
+
278
+ export class TaskRunPromise < T > extends Promise < TaskRunResult < T > > {
279
+ constructor (
280
+ executor : (
281
+ resolve : ( value : TaskRunResult < T > | PromiseLike < TaskRunResult < T > > ) => void ,
282
+ reject : ( reason ?: any ) => void
283
+ ) => void ,
284
+ private readonly taskId : string
285
+ ) {
286
+ super ( executor ) ;
287
+ }
288
+
289
+ unwrap ( ) : Promise < T > {
290
+ return this . then ( ( result ) => {
291
+ if ( result . ok ) {
292
+ return result . output ;
293
+ } else {
294
+ throw new SubtaskUnwrapError ( this . taskId , result . error ) ;
295
+ }
296
+ } ) ;
297
+ }
298
+ }
299
+
266
300
export type BatchResult < TOutput = any > = {
267
301
id : string ;
268
302
runs : TaskRunResult < TOutput > [ ] ;
@@ -311,7 +345,7 @@ export interface Task<TIdentifier extends string, TInput = void, TOutput = any>
311
345
* }
312
346
* ```
313
347
*/
314
- triggerAndWait : ( payload : TInput , options ?: TaskRunOptions ) => Promise < TaskRunResult < TOutput > > ;
348
+ triggerAndWait : ( payload : TInput , options ?: TaskRunOptions ) => TaskRunPromise < TOutput > ;
315
349
316
350
/**
317
351
* Batch trigger multiple task runs with the given payloads, and wait for the results. Returns the results of the task runs.
@@ -512,20 +546,28 @@ export function createTask<
512
546
customQueue
513
547
) ;
514
548
} ,
515
- triggerAndWait : async ( payload , options ) => {
549
+ triggerAndWait : ( payload , options ) => {
516
550
const taskMetadata = taskCatalog . getTaskManifest ( params . id ) ;
517
551
518
- return await triggerAndWait_internal < TInput , TOutput > (
519
- taskMetadata && taskMetadata . exportName
520
- ? `${ taskMetadata . exportName } .triggerAndWait()`
521
- : `triggerAndWait()` ,
522
- params . id ,
523
- payload ,
524
- {
525
- queue : customQueue ,
526
- ...options ,
527
- }
528
- ) ;
552
+ return new TaskRunPromise < TOutput > ( ( resolve , reject ) => {
553
+ triggerAndWait_internal < TInput , TOutput > (
554
+ taskMetadata && taskMetadata . exportName
555
+ ? `${ taskMetadata . exportName } .triggerAndWait()`
556
+ : `triggerAndWait()` ,
557
+ params . id ,
558
+ payload ,
559
+ {
560
+ queue : customQueue ,
561
+ ...options ,
562
+ }
563
+ )
564
+ . then ( ( result ) => {
565
+ resolve ( result ) ;
566
+ } )
567
+ . catch ( ( error ) => {
568
+ reject ( error ) ;
569
+ } ) ;
570
+ } , params . id ) ;
529
571
} ,
530
572
batchTriggerAndWait : async ( items ) => {
531
573
const taskMetadata = taskCatalog . getTaskManifest ( params . id ) ;
@@ -614,19 +656,27 @@ export async function trigger<TTask extends AnyTask>(
614
656
* }
615
657
* ```
616
658
*/
617
- export async function triggerAndWait < TTask extends AnyTask > (
659
+ export function triggerAndWait < TTask extends AnyTask > (
618
660
id : TaskIdentifier < TTask > ,
619
661
payload : TaskPayload < TTask > ,
620
662
options ?: TaskRunOptions ,
621
663
requestOptions ?: ApiRequestOptions
622
- ) : Promise < TaskRunResult < TaskOutput < TTask > > > {
623
- return await triggerAndWait_internal < TaskPayload < TTask > , TaskOutput < TTask > > (
624
- "tasks.triggerAndWait()" ,
625
- id ,
626
- payload ,
627
- options ,
628
- requestOptions
629
- ) ;
664
+ ) : TaskRunPromise < TaskOutput < TTask > > {
665
+ return new TaskRunPromise < TaskOutput < TTask > > ( ( resolve , reject ) => {
666
+ triggerAndWait_internal < TaskPayload < TTask > , TaskOutput < TTask > > (
667
+ "tasks.triggerAndWait()" ,
668
+ id ,
669
+ payload ,
670
+ options ,
671
+ requestOptions
672
+ )
673
+ . then ( ( result ) => {
674
+ resolve ( result ) ;
675
+ } )
676
+ . catch ( ( error ) => {
677
+ reject ( error ) ;
678
+ } ) ;
679
+ } , id ) ;
630
680
}
631
681
632
682
/**
0 commit comments