我向另一臺服務器發出請求,作爲我的Sinatra應用程序的POST方法的一部分。我用來發出請求的庫是一個EventMachine庫,當發出請求時立即返回一個EM :: Deferrable對象,但是我需要在控制器方法中阻塞,直到異步請求完成,這樣我才能返回一個partial數據在請求中返回。這樣做的最佳方法是什麼?如何阻止EventMachine可延遲對象?
0
A
回答
1
一個解決方案是使用async_sinatra和基於EM的網絡服務器,如Thin。使用async_sinatra,您將有一個body
方法進行顯式呈現。它會這樣工作:
require 'sinatra/async'
require 'em-http-request'
class Application < Sinatra::Base
register Sinatra::Async
apost '/' do
http = EM::HttpRequest.new('http://www.google.de/').get
http.callback do
body do
# your http processing in here, will be rendered
end
end
http.errback do
body { 'error' }
end
end
end
+0
這工作完美。謝謝! – Bryan
0
當你封堵一個API時,你會遇到兩個世界中最糟糕的情況。
我會盡量避免通過EM調用,以支持更多'傳統'方法(a-la curl)。
如果這是不可能的,那麼我會返回一個空的部分,並讓客戶端輪詢服務器的更新。
相關問題
- 1. EventMachine延遲迴調鏈
- 2. 延遲或阻止Windows休眠/關機
- 3. 遞歸Ajax延遲對象
- 4. AppEngine持久對象延遲?
- 5. 延遲加載Flash對象
- 6. 遞歸Ajax延遲對象
- 7. EventMachine的可以使用的時候不響應延遲
- 8. 帶延遲的阻塞/非阻塞
- 9. 如何阻止WPF中的WebBrowser對象?
- 10. 如何阻止PowerShell解包Enumerable對象?
- 11. 如何防止菜單欄延遲?
- 12. 如何停止觸發的延遲?
- 13. 我可以解析函數作用域延遲對象還是必須傳遞延遲對象?
- 14. 如何延遲
- 15. 如何阻止Android評分欄蔓延?
- 16. 添加可延遲事件的延遲
- 17. 每個對象的可可工具提示延遲?
- 18. 救援EventMachine中的錯誤::可推遲
- 19. 如何防止對TCP套接字的延遲迴復?
- 20. getPage裏面的延遲對象打印?
- 21. 對象拖動延遲問題
- 22. AWS CloudFront根對象更新延遲
- 23. 在jQuery中使用延遲對象
- 24. NHibernate延遲加載和對象比較
- 25. 科特林對象加載延遲
- 26. AngularJS延遲對象的行爲
- 27. 驗證關聯對象(延遲驗證)
- 28. 意外的延遲對象的行爲
- 29. 抓分開使用延遲對象
- 30. 延遲加載不新增對象
您是否正在使用像瘦的EM網絡服務器? – tbuehlmann