当 client.sendRequest(req,cursor).then((answer) 没有收到任何答复时会发生什么/如何处理?

问题描述 投票:0回答:1

我有一些 VS Code 客户端,它使用以下方式向服务器发送请求:

client.sendRequest(req, cursor).then((answer)=> {
processing...
})

如果服务器(出于某种充分的原因)没有发送任何答案,会发生什么?

我怎样才能捕捉到这个案例并相应地显示一些消息?

typescript visual-studio-code vscode-extensions language-server-protocol
1个回答
0
投票

假设您正在使用 https://github.com/microsoft/vscode-languageserver-node/blob/main/client/src/common/client.ts,一个有根据的猜测(未验证):与返回的承诺竞争并承诺在

setTimeout
完成后解决。使用
sendRequest
签名,您可以在其中传递取消令牌(然后您可以随时使用取消令牌。例如,如果承诺竞赛通过
setTimeout
承诺解决)。如果 sendRequest Promise 赢得了比赛,则
clearTimeout
来自 setTimeout Promise 的超时 ID。

代码可能行不通,因为我实际上没有尝试过,只是猜测:

const millis = // TODO
let timeoutID;
const cancelTokenSrc = new CancellationTokenSource();
const timeout = new Promise((resolve)=>{timeoutID=setTimeout(resolve,millis,cancelTokenSrc)});
const winner = await Promise.race(timeout, client.sendRequest(/**blah blah, */cancelTokenSrc.token));
if (winner === cancelTokenSrc) {
   cancelTokenSrc.cancel();
   // timed out.
} else {
   clearTimeout(timeoutID);
   // do stuff with winner
}
© www.soinside.com 2019 - 2024. All rights reserved.