Skip to content

Commit 5e73133

Browse files
committed
feat: better error messages for Request is already pending on API callers
1 parent aea3b59 commit 5e73133

File tree

3 files changed

+19
-3
lines changed

3 files changed

+19
-3
lines changed

playground/Coalesce.Web.Vue3/src/components/test.vue

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
>
1111
</c-select>
1212

13+
<v-btn @click="caseVm.$load()">Load</v-btn>
14+
<v-btn @click="caseVm.downloadImage()">Load</v-btn>
1315
<v-card class="my-2">
1416
<v-row>
1517
<v-col>
@@ -62,7 +64,7 @@
6264
:min="new Date(1722627824331)"
6365
:max="new Date(1725034169880)"
6466
:allowedDates="(v: Date) => v.getDay() > 0 && v.getDay() < 6"
65-
step="10"
67+
:step="10"
6668
v-model="date"
6769
clearable
6870
/>

src/coalesce-vue/src/api-client.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1307,7 +1307,7 @@ abstract class ApiStateBase<TArgs extends any[], TResult> {
13071307
/** Invokes a call to this API endpoint. */
13081308
public readonly invoke!: this;
13091309

1310-
protected readonly apiClient!: ApiClient<any>;
1310+
protected readonly apiClient!: ApiClient<ApiRoutedType>;
13111311
protected readonly invoker!: ApiCallerInvoker<
13121312
TArgs,
13131313
ApiResultPromise<TResult> | undefined | void,
@@ -1460,6 +1460,10 @@ export abstract class ApiState<
14601460
return this;
14611461
}
14621462

1463+
/** The name of this caller to be used in debugging/error messages.
1464+
* @internal */
1465+
_name?: string;
1466+
14631467
protected _simultaneousGetCaching = false;
14641468

14651469
/** Enable simultaneous request caching for the API caller,
@@ -1591,7 +1595,7 @@ export abstract class ApiState<
15911595
switch (this._concurrencyMode) {
15921596
case "disallow":
15931597
throw Error(
1594-
`Request is already pending for invoker ${this.invoker.toString()}`,
1598+
`Request is already pending for API Caller ${this.$metadata ? `/${this.apiClient.$metadata.controllerRoute}/${this.$metadata.name}` : (this._name ?? this.invoker.toString())}`,
15951599
);
15961600

15971601
case "cancel":

src/coalesce-vue/src/viewmodel.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,7 @@ export abstract class ViewModel<
433433
this.$loadFromModel(result, startTime, true);
434434
}
435435
});
436+
$load._name = `/${this.$metadata.controllerRoute}/get`;
436437

437438
// Lazy getter technique - don't create the caller until/unless it is needed,
438439
// since creation of api callers is a little expensive.
@@ -555,6 +556,7 @@ export abstract class ViewModel<
555556
this.updateRelatedForeignKeysWithCurrentPrimaryKey();
556557
}
557558
});
559+
$save._name = `/${this.$metadata.controllerRoute}/save`;
558560

559561
// Lazy getter technique - don't create the caller until/unless it is needed,
560562
// since creation of api callers is a little expensive.
@@ -636,6 +638,8 @@ export abstract class ViewModel<
636638
},
637639
);
638640

641+
$bulkSave._name = `/${this.$metadata.controllerRoute}/bulkSave`;
642+
639643
// Lazy getter technique - don't create the caller until/unless it is needed,
640644
// since creation of api callers is a little expensive.
641645
Object.defineProperty(this, "$bulkSave", { value: $bulkSave });
@@ -1007,6 +1011,8 @@ export abstract class ViewModel<
10071011
this._removeFromParentCollection();
10081012
});
10091013

1014+
$delete._name = `/${this.$metadata.controllerRoute}/delete`;
1015+
10101016
// Lazy getter technique - don't create the caller until/unless it is needed,
10111017
// since creation of api callers is a little expensive.
10121018
Object.defineProperty(this, "$delete", { value: $delete });
@@ -1743,6 +1749,8 @@ export abstract class ListViewModel<
17431749
}
17441750
});
17451751

1752+
$load._name = `/${this.$metadata.controllerRoute}/list`;
1753+
17461754
// Lazy getter technique - don't create the caller until/unless it is needed,
17471755
// since creation of api callers is a little expensive.
17481756
Object.defineProperty(this, "$load", { value: $load });
@@ -1758,6 +1766,8 @@ export abstract class ListViewModel<
17581766
c.count(this.$params),
17591767
);
17601768

1769+
$count._name = `/${this.$metadata.controllerRoute}/count`;
1770+
17611771
// Lazy getter technique - don't create the caller until/unless it is needed,
17621772
// since creation of api callers is a little expensive.
17631773
Object.defineProperty(this, "$count", { value: $count });

0 commit comments

Comments
 (0)