Scala play framework-返回数据列表的正确方法是什么?

Scala play framework-返回数据列表的正确方法是什么?,scala,playframework,Scala,Playframework,我不熟悉反应性/可观察性的概念 我定义了获取产品的路线,如下所示: GET/products controller.ProductController.findProducts 以及控制器中的实现: def findProducts()=secured.async{implicit request=> productDao.find() .map(products=>Ok(Json.toJson(products))) //产品:列表[产品] .recover(errHandler) } 然后

我不熟悉反应性/可观察性的概念

我定义了获取
产品的路线,如下所示:

GET/products controller.ProductController.findProducts

以及控制器中的实现:

def findProducts()=secured.async{implicit request=>
productDao.find()
.map(products=>Ok(Json.toJson(products)))
//产品:列表[产品]
.recover(errHandler)
}
然后,在客户端,我打电话并按如下方式订阅:

let sub=this.find()
.订阅(
产品=>{
这一点。产品=产品;
this.productsBehaviorSubject.next(this.products);
如果(!!sub)
sub.取消订阅();
},
error=>console.log(“错误获取单位:”+错误)
);
我一拿到数据就退订了。(基本上像承诺一样使用它)。
所以我想知道,这是否是正确的方法。我应该在多个响应中返回,而不是在一个响应中返回
列表[产品]

def findProducts()=secured.async{implicit request=>
productDao.find()
.map(产品=>{
products.map(p=>Ok(Json.toJson(p))//还没有尝试过这个
})
//产品:列表[产品]
.recover(errHandler)
}
然后在客户端。。也许吧

this.find()
.take(50)
.订阅(
产品=>{
此.products.push(产品)
},
error=>console.log(“错误获取单位:“+error”),
()=>this.productsBehaviorSubject.next(this.products)
);

您的第一种方法是正确的,您会注意到
secured.async
希望代码块返回
Future[Result]
。因此,如果您试图映射产品,那么签名将是
Future[Seq[Result]]
,这将给您一个编译错误


根据我的经验,在单个响应中返回完整列表是标准的编码方式。

您的第一种方法是正确的,您会注意到
安全的。async
希望代码块返回
未来的[结果]
。因此,如果您试图映射产品,那么签名将是
Future[Seq[Result]]
,这将给您一个编译错误

根据我的经验,在一个响应中返回完整列表是编写代码的标准方法