我有一个简单的代码:
override def createContributorsList(url: String, params: String): F[List[Contributor]] = getContributorsFromClient(url, params).fold[List[Contributor]](_ => List(), res => res)
override def createReposList(organization: String, params: String): F[List[GitRepository]] = getReposFromClient(organization, params).fold[List[GitRepository]](_ => List(), res => res)
此代码返回 github 中的存储库列表和贡献列表。但现在我需要打电话createContributorsList
对于我找到的每个存储库createReposList
。我做了一个for comprehension
block:
val stats = new StatisticsRepository[IO](new GitHttpClient[IO])
val res = for {
repos <- stats.createReposList("github", "")
} yield repos
它工作正常,它找到了给定组织的存储库(github)。所以我尝试这样做:
val res = for {
repos <- stats.createReposList("github", "")
list = repos.foreach(repo => stats.createContributorsList(repo.contributors_url, ""))
} yield (repos, list)
But list
总是空的。我不知道如果没有的话我怎么能做到这一点for comprehension
,因为我在这里操作Monads
like IO
。我应该如何创建一个代码来循环每个存储库repos
并打电话stats.createContributorsList
对每个人?