aboutsummaryrefslogtreecommitdiff
path: root/editors/code/src/ctx.ts
diff options
context:
space:
mode:
authorVeetaha <[email protected]>2020-02-22 18:58:00 +0000
committerVeetaha <[email protected]>2020-02-23 13:49:09 +0000
commit4cee7cddc84aa3769d5d3e87e5745f4c981bca28 (patch)
treef8b98268925cf01e2cc74a9e12fac81a460c1eff /editors/code/src/ctx.ts
parent838ad6bcfb2a82c030e18d019b8a06752f0fc828 (diff)
vscode: gracefully handle cancellation errors
Diffstat (limited to 'editors/code/src/ctx.ts')
-rw-r--r--editors/code/src/ctx.ts21
1 files changed, 0 insertions, 21 deletions
diff --git a/editors/code/src/ctx.ts b/editors/code/src/ctx.ts
index dfc8aa7b9..43540e0d8 100644
--- a/editors/code/src/ctx.ts
+++ b/editors/code/src/ctx.ts
@@ -52,24 +52,3 @@ export interface Disposable {
52 dispose(): void; 52 dispose(): void;
53} 53}
54export type Cmd = (...args: any[]) => unknown; 54export type Cmd = (...args: any[]) => unknown;
55
56export async function sendRequestWithRetry<R>(
57 client: lc.LanguageClient,
58 method: string,
59 param: unknown,
60 token?: vscode.CancellationToken,
61): Promise<R> {
62 for (const delay of [2, 4, 6, 8, 10, null]) {
63 try {
64 return await (token ? client.sendRequest(method, param, token) : client.sendRequest(method, param));
65 } catch (err) {
66 if (delay === null || err.code !== lc.ErrorCodes.ContentModified) {
67 throw err;
68 }
69 await sleep(10 * (1 << delay));
70 }
71 }
72 throw 'unreachable';
73}
74
75const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));