我在Mac服务器上使用Vapor。服务器进行冗长的计算,所以我需要允许客户端能够取消计算。
在客户端,我有以下JavaScript代码发送POST请求并等待结果:
async function doSomething(text) {
controller = new AbortController()
const response = await fetch("http://" + website + "/api/dosomething",
{
method: 'POST',
signal: controller.signal,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({ text: text })
})
const results = await response.json()
return results
}
字符串
以及取消进程的按钮:
async function cancelquery() {
controller.abort()
}
型
这在客户端工作得很好,也就是说,当我单击“取消”按钮时,客户端不再等待结果。但是,我不知道如何在服务器端捕获“abort”信号来停止计算。Vapor中是否有任何外部变量、方法或事件可以用来知道客户端发送了Abort信号?
2条答案
按热度按时间hrysbysz1#
这与服务器端完全无关,因为服务器不知道客户端是否仍在等待响应。
Aborting an HTTP request. Server-side advantage?
这里有一个类似的问题,但与Vapor无关。
kkbh8khc2#
我会调查提交你的'fetch'到
eventLoop
或promise
,但通过在应用程序配置键上的字典中存储指向它的指针并将键传递回客户端来跟踪它。然后可以创建一个“cancel”路由,它使用该键检索此事件循环并在其上调用close()
。我还没有玩过这样做,但它似乎是一个合理的地方开始。你可以通过添加一个
whenComplete
处理程序来删除字典中的条目,从而允许正常终止。