我正在使用 B-Pipe API 從 Bloomberg 請求金融證券資料。大型請求被分成小組并回傳,PARTIAL_RESPONSE最終回應為RESPONSE。遞回handleSingleEvent函式遞回,直到最終RESPONSE由 . 回傳reqEventQueue.NextEvent()。
我的問題是只RESPONSE回傳最后一組證券。PARTIAL_RESPONSE該函式不回傳中間組。但是,這些PARTIAL_RESPONSE組是從彭博收到的。
我想我可能需要一些累加器引數或者應該使用類似于 List.collect 的東西,但我不知道如何開始。
// list<Request> * EventQueue * Session -> list<list<string>>
let handleEvents (requests: Request list, reqEventQueue: EventQueue, session: Session) =
let rec handleSingleEvent (request: Request) =
try
let eventObj = reqEventQueue.NextEvent()
match eventObj.Type with
| Event.EventType.PARTIAL_RESPONSE ->
processReferenceResponseEvent eventObj
|> makeJson
|> ignore
handleSingleEvent request
| Event.EventType.RESPONSE -> processReferenceResponseEvent eventObj |> makeJson
| _ -> processMiscEvents eventObj |> makeJson
with
| ex -> failwithf "%s" ex.Message
List.map (fun request -> handleSingleEvent request) requests
更新 我進行了編輯,但現在代碼似乎進入了無限遞回。
let handleEvents (requests: Request list, reqEventQueue: EventQueue, session: Session) =
let rec handleSingleEvent (request: Request) : seq<list<string>> =
seq {
let eventObj = reqEventQueue.NextEvent()
match eventObj.Type with
| Event.EventType.REQUEST_STATUS -> yield processMiscEvents eventObj |> makeJson
| Event.EventType.ADMIN -> yield processAdminEvent eventObj |> makeJson
| Event.EventType.AUTHORIZATION_STATUS -> yield processAuthEvent eventObj session |> makeJson
| Event.EventType.PARTIAL_RESPONSE ->
yield processReferenceResponseEvent eventObj
|> makeJson
yield! handleSingleEvent request
| Event.EventType.RESPONSE -> yield processReferenceResponseEvent eventObj |> makeJson
| _ -> yield processMiscEvents eventObj |> makeJson
} |> ignore
handleSingleEvent request
List.map (fun request -> handleSingleEvent request) requests
uj5u.com熱心網友回復:
我不熟悉 Bloomberg API,但這是一種相當常見的模式。我認為處理它的最簡單方法是遞回地生成一系列 JSON 字串,yield用于處理當前事件并yield!遞回地處理佇列的其余部分。這樣您就不必擔心手動累積結果。所以是這樣的:
let rec loop () : seq<string> = // assumption: makeJson has type _ -> string
seq {
let eventObj = reqEventQueue.NextEvent()
match eventObj.Type with
| Event.EventType.PARTIAL_RESPONSE ->
yield processReferenceResponseEvent eventObj
|> makeJson
yield! loop ()
| Event.EventType.RESPONSE ->
yield processReferenceResponseEvent eventObj
|> makeJson
| _ ->
yield processMiscEvents eventObj
|> makeJson
}
loop ()
您的代碼中還有一些其他問題我沒有嘗試解決,例如根本沒有使用requestand值。session我想你可以很容易地解決這個問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/461013.html
