使用Dartz 针对网络请求进行封装

错误处理是网络请求过程中最重要的方面之一,同时他也是项目过程中很重要的一个东西。了解dartz包的Either能以一种更清晰、更简洁的方式来管理成功和失败情况,让我们深入了解 dartz 里面Either。

Either

Either就像一个值的容器,该值可能是错误或任何其他值。一般情况下,Left 是错误,Right 分别是值。

Either的使用

一般情况下我们针对网络请求的处理如下:

dart 复制代码
// A function that uses traditional error handling  
Future<http.Response> getData() async {  
try {  
final response = await http.post(Uri.parse('yourapilink'), body: {});  
if (response.statusCode == 200) {  
return response; // 成功
} else {  
// 失败  
switch (response.statusCode) {  
case 400:  
throw '服务器无法处理您的请求';  
case 401:  
throw '没有授权。。';  
default:  
throw '出现了一些其他的问题......';  
}  
}  
} catch (e) {  
//捕获意外错误
throw '发生意外错误:: $e';  
}  
}

尽管它提供了熟悉的结构化控制流,但传统的异常处理可能会带来性能开销,破坏自然代码流,导致冗长,并提供有限的信息,从而影响了一定程度的可读性和效率。

现在让我们使用Either来处理上面的网络请求:

csharp 复制代码
import 'package:dartz/dartz.dart';
// 使用 Either 概念处理错误的函数  
Future<Either< String , http.Response>> getData() async {  
try {  
Final response = wait http.post( Uri .parse( 'yourapilink' ), body: {});  
if (response.statusCode == 200 ) {  
// 在这种情况下,请求成功  
// 我们返回包含响应的 Right  
return Right(response);  
}  
// 在这种情况下,请求不成功  
// 我们可以检查状态代码  
// 返回相应的消息  
switch (response.statusCode) {  
case 400 :  
return const Left( '服务器无法处理您的请求' ) ;  
case 401 :  
return const Left( '没有授权' );  
default:  
return const Left( '出现了一些其他的问题...' );  
}  
} catch (e) {  
return Left(e.toString());  
}  
}

Either可以有效地处理潜在的错误,并将该函数无缝集成到代码的各个部分中。这种方法可以提供更健壮和灵活的编程体验。

最后封装后的使用场景:

scss 复制代码
Future  requestData() async {  
// 首先我们执行 getData() 函数并等待结果。  
final value = await getData(); 
// 然后我们折叠结果以访问左值和右值  
// 如果它是左值(错误),我们将处理错误  
// 如果它是右值(实际数据),我们将相应地处理它。  
value.fold(  
(left) {  
// 向用户显示错误消息  
debugPrint(left);  
},  
(right) {  
// 请求成功时返回的值  
// 使用此数据更新 UI  
debugPrint(right) );  
},  
);  
}

通过采用这种方法,忽视错误处理的风险就会降低,从而使您的项目更加的清晰,以及易读,在dartz包中有很多简洁的功能和东西有待发现。

相关推荐
桂月二二37 分钟前
探索前端开发中的 Web Vitals —— 提升用户体验的关键技术
前端·ux
hunter2062062 小时前
ubuntu向一个pc主机通过web发送数据,pc端通过工具直接查看收到的数据
linux·前端·ubuntu
qzhqbb2 小时前
web服务器 网站部署的架构
服务器·前端·架构
刻刻帝的海角2 小时前
CSS 颜色
前端·css
浪浪山小白兔3 小时前
HTML5 新表单属性详解
前端·html·html5
lee5763 小时前
npm run dev 时直接打开Chrome浏览器
前端·chrome·npm
2401_897579653 小时前
AI赋能Flutter开发:ScriptEcho助你高效构建跨端应用
前端·人工智能·flutter
limit for me4 小时前
react上增加错误边界 当存在错误时 不会显示白屏
前端·react.js·前端框架
浏览器爱好者4 小时前
如何构建一个简单的React应用?
前端·react.js·前端框架
qq_392794484 小时前
前端缓存策略:强缓存与协商缓存深度剖析
前端·缓存