swift 如何处理vapor中取消的请求?

4zcjmb1e  于 2023-08-02  发布在  Swift
关注(0)|答案(2)|浏览(149)

我在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信号?

hrysbysz

hrysbysz1#

这与服务器端完全无关,因为服务器不知道客户端是否仍在等待响应。
Aborting an HTTP request. Server-side advantage?
这里有一个类似的问题,但与Vapor无关。

kkbh8khc

kkbh8khc2#

我会调查提交你的'fetch'到eventLooppromise,但通过在应用程序配置键上的字典中存储指向它的指针并将键传递回客户端来跟踪它。然后可以创建一个“cancel”路由,它使用该键检索此事件循环并在其上调用close()
我还没有玩过这样做,但它似乎是一个合理的地方开始。你可以通过添加一个whenComplete处理程序来删除字典中的条目,从而允许正常终止。

相关问题