diff options
author | Veetaha <[email protected]> | 2020-02-22 18:58:00 +0000 |
---|---|---|
committer | Veetaha <[email protected]> | 2020-02-23 13:49:09 +0000 |
commit | 4cee7cddc84aa3769d5d3e87e5745f4c981bca28 (patch) | |
tree | f8b98268925cf01e2cc74a9e12fac81a460c1eff /editors/code/src/ctx.ts | |
parent | 838ad6bcfb2a82c030e18d019b8a06752f0fc828 (diff) |
vscode: gracefully handle cancellation errors
Diffstat (limited to 'editors/code/src/ctx.ts')
-rw-r--r-- | editors/code/src/ctx.ts | 21 |
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 | } |
54 | export type Cmd = (...args: any[]) => unknown; | 54 | export type Cmd = (...args: any[]) => unknown; |
55 | |||
56 | export 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 | |||
75 | const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); | ||