热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

管道和错误处理

如何解决《管道和错误处理》经验,为你挑选了1个好方法。

假设您具有以下功能:

def get_city_temp(city_id) do
   'blahblahcityforcastfortoday.com/request/#{city_id}'
   |> HTTPoison.get
   |> parse_body
   |> get_forecast
   |> get_temp
end

现在说GET失败了,所以响应是:

{:ok, %HTTPoison.Response{status_code: 400, ...}}

但是get_forecast期待一个形成良好的身体,因此会抱怨传递给它的结构,或丢失的钥匙等.处理这样的错误的最佳方法是什么?在其他语言中,我只是将所有函数调用包装在try catchs中,并返回带有成功报告的元组.在这种情况下,我不确定如何构建我的代码以最好地向用户报告错误.



1> Dogbert..:

这正是with/1宏的意思.假设parse_body和其他功能也会{:ok, _}在成功和{:error, _}失败时返回,您可以:

with {:ok, response} <- HTTPoison.get(...),
     {:ok, parsed} <- parse_body(response),
     {:ok, forecast} <- get_forecast(parsed),
     {:ok, temp} <- get_temp(forecast), do: {:ok, temp}

如果任何模式匹配失败,则整个事件返回该值.例如,如果在get_forecast返回{:error, :foo}所有先前函数后返回{:ok, _},with则将返回{:error, :foo}.


唯一的问题是,`=`应该替换为`<-`,否则匹配时由于问题会"上升".除此之外,这是要走的路!
推荐阅读
author-avatar
浪迹天涯沃热尔_441
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有