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]]
,这将给您一个编译错误
根据我的经验,在一个响应中返回完整列表是编写代码的标准方法