2016-12-01 178 views
2

我正在開發一個在服務器端使用Sinatra的API。我想要發出一個HTTP請求,但會繼續掛起/等待並保持活動狀態,直到稍後的事件(另一個事件)導致它在稍後時間以特定的響應值完成爲止。如何等待並稍後發送對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 

我怎麼能實現這一點,還是有得這種效果呢?

我也考慮讓客戶端不斷向服務器輪詢已完成請求的請求,但大量的請求可能會導致昂貴的互聯網帳單。

回答

2

我會小心處理掛起的請求,因爲它不是一個很好的用戶體驗。話雖這麼說,如果你需要在另一個之前有一件事情完成,這裏有一些選擇:

  1. 使用event emitter
  2. 使用async library

沒有你的問題的完整的上下文很難然後根據你所描述的內容推薦一個,這聽起來像一個「承諾」將解決你的問題,這是建議#2。它基本上允許你在做第二件事之前等待一件事完成。

相關問題