2016-10-03 42 views
0

我正在學習如何使用斯卡拉,MongoDB的好戲框架一起,和我在這是這裏位於一個示範項目,一直在尋找:https://github.com/jonasanso/play-reactive-mongo-db某對象插入Mongo的數據庫使用Scala的ReactiveMongo司機

然而,我不明白create()方法中的語法。沒有使用關鍵字yield可以使用另一種方式編寫它嗎?我仍然在學習Scala,我不明白這種方法是如何工作的。

def create(name: String, population: Int) = Action.async { 
    for { 
     cities <- citiesFuture 
     lastError <- cities.insert(City(name, population)) 
    } yield 
     Ok("Mongo LastError: %s".format(lastError)) 
    } 
+0

先閱讀[文件](HTTP:// reactivemongo。 org/releases/0.11/documentation/index.html) – cchantep

回答

0

如果你不想使用收益的語法,您可以將您的代碼轉換成等價的:我們推薦

citiesFuture 
    .flatMap (cities => cities.insert(City(name, population)) 
    .map (lastError => Ok(s"Mongo LastError: $lastError")) 
+0

好,非常感謝!我想知道是否可以用'map()'替換'flatMap()'或者是否有使用'flatMap()'的特定原因?我仍然在理解何時使用其中一個。 – Calculus5000

+0

你不能在這裏使用map而不是flatMap,因爲在這種情況下你會得到Future [Future [String]]。爲了製造期貨鏈:首先執行citiesFuture,比執行future.insert(...)你必須使用flatMap。最後爲cities.insert的結果,您可以使用地圖將String結果轉換爲Play的'Ok' – Nyavro

相關問題