我在mysql中的訂單表可觀的鏈組,每個訂單有許多與之相關聯的文件,無論是報價單,發票等有因此第二張稱爲「文檔」的表具有「document_id」主鍵和「order_id」外鍵;以類似的方式,我還有另外一種情況,即技術人員對每輛車進行的不同檢查,然後是另一張車輛圖片。我創建使用節點,並表達需要返回一個類似的JSON Web服務...如何,以前是每一個在forkjoin()操作
[
{
"order_id": 1003,
"customer_id": 8000,
"csi": 90,
"date_admitted": "2016-10-28T05:00:00.000Z",
"plates": "YZG-5125",
...
documents: {
"type": "invoice",
"number": "1234",
...
},
checks: {
"scanner": "good",
"battery": "average",
...
},
vehicle_pictures: {
"title": "a title...",
"path": "the file path"
...
}
},
{
...
},
...
]
正如你所看到的,它是必要做的每一個訂單三個查詢,一個用於檢查,另一個用於文檔,第三個用於圖片,那麼我需要將這些子結果添加到最終返回響應中的數組的順序。
在舊版的同步編程中這將是一件非常容易的事情,但是由於mysql庫的連接對象中query()方法的異步性質,這種威脅變成了一個真正的地獄。
在需要處理單個訂單的情況下,使用forkJoin()在服務器上使用RxJS庫就足以一次處理所有三個結果,但我不確定如何「鏈接」每個(使用forkJoin來管理3個查詢),所以所有事情都得到了處理,最後我可以調用res.json(result),並將所有東西都整齊地組合起來。
注:我想RxJS而是採用了同步庫包像節點的mysql-的libmysqlclient來解決這個問題。原因基本上是,像Node JS這樣的異步語言的「正確」方式是異步的。此外,我想用RxJS而不是異步,Q承諾,或任何其他庫,因爲觀測量似乎是在異步解決方案大賽絕對的贏家,也希望在我開發的所有解決方案一致的,所以這個問題主要是面向對RxJS主人。
而且每一個問題,我在如此的相似,這個發現具有典型的「純粹」的答覆說,如果你正在使用節點你「應該」使用異步不要以爲同步解決方案。因此,這是對那些捍衛這一立場是一個挑戰,因爲這(我認爲)是其中的節點同步很有意義的案例之一,但我真的想學習如何與RxJS,而不是以爲這是不可能做到這一點,我相信這不是。
你嘗試過這麼遠嗎?你卡在哪裏?這將淨化更好的質量答案。 – paulpdaniels