我正在服务器端使用 Sinatra 开发一个 API。我希望发出一个 HTTP 请求,但继续挂起/等待并保持事件状态,直到稍后的事件(另一个事件)导致它在稍后的时间以特定的响应值完成。
换句话说:
get '/api/foo/:request_identifier' do
# some code here
wait_until_finished params[:request_identifier]
end
# When this URL is visited, the hanging request with the matching
# request identifier will complete, sending "foo response text" to the
# client.
get '/api/bar/:request_identifier' do
make_it_finish params[:request_identifier] "foo response text"
"bar response text"
end
我怎样才能实现这个,或者达到这个效果的东西?
我还考虑过让客户端不断向服务器发出请求,轮询已完成的请求,但大量请求可能会导致昂贵的互联网费用。
最佳答案
我会小心挂起的请求,因为这不是一个很好的用户体验。话虽这么说,如果您需要一件事先于另一件事完成,这里有一些选择:
- 使用 event emitter
- 使用 async library
如果没有您问题的完整背景,很难推荐其中之一,但是,根据您的描述,听起来“ promise ”可以解决您的问题,这是建议#2。它基本上允许您在执行第二件事之前等待一件事完成。
关于ruby - 如何等待并稍后发送对 HTTP 请求的响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40919994/