首页 > 解决方案 > 后处理 Enum.to_list

问题描述

我有这个管道

 events
 |> Task.async_stream(&expensive_func/1)
 |> Enum.to_list

返回此数据:

[ok: {item}, ok: {item} ... ]

所以,为了有一个项目数组,[item, item]我像这样对它进行后处理:

 events
 |> Task.async_stream(&expensive_func/1)
 |> Enum.to_list
 |> Enum.map(fn {:ok, event} -> event end)

有没有更优雅的方法来做到这一点?

标签: elixir

解决方案


其他方式:

events
|> Task.async_stream(&expensive_func/1))
|> Enum.map(&(elem(&1,1)))

警告:由于我们直接访问 each 返回的元组的第二个元素,因此Task不进行检查以确保Task已正确运行。您可以添加模式匹配:ok来解决该问题(就像您在问题中所做的那样)。


推荐阅读