Flutter中多Rest API调用如何向UI返回转账结果?
转账API流程优化与错误处理方案
你的当前实现存在几个关键问题:
- 未处理API调用的异步特性,同步调用无法获取实际请求结果
- 缺乏全局错误捕获机制,任一API失败无法将错误信息反馈给UI
- 调用链路没有返回值传递,UI无法获取最终转账结果
以下是修正后的实现方案,基于Promise处理异步请求,同时覆盖成功/失败场景的反馈:
步骤1:用Promise封装所有API请求
API请求都是异步操作,必须用Promise来包裹,才能正确处理成功/失败回调:
// 模拟授权API:成功resolve,失败reject function authorize() { return new Promise((resolve, reject) => { // 替换为实际授权请求逻辑 const isAuthorized = true; // 模拟授权结果 if (isAuthorized) { resolve("授权成功"); } else { reject(new Error("授权失败:无权限执行转账")); } }); } // 模拟获取收款人API:有收款人resolve,无则reject(触发添加流程) function getBeneficiary() { return new Promise((resolve, reject) => { // 替换为实际获取收款人逻辑 const hasBeneficiary = false; // 模拟无收款人场景 if (hasBeneficiary) { resolve("已获取收款人信息"); } else { reject(new Error("未找到收款人")); } }); } // 模拟添加收款人API function addBeneficiary() { return new Promise((resolve, reject) => { // 替换为实际添加收款人逻辑 const addSuccess = true; // 模拟添加结果 if (addSuccess) { resolve("收款人添加成功"); } else { reject(new Error("收款人添加失败")); } }); } // 模拟转账请求API:成功返回指定消息 function requestTransfer() { return new Promise((resolve, reject) => { // 替换为实际转账请求逻辑 const transferSuccess = true; // 模拟转账结果 if (transferSuccess) { resolve("Transfer is successful"); } else { reject(new Error("转账失败:余额不足或账户异常")); } }); }
步骤2:构建完整调用链路并处理结果
使用async/await简化异步流程,同时用try/catch捕获所有环节的错误,最终将结果反馈给UI:
async function handleTransferFlow() { try { // 1. 执行授权 await authorize(); // 2. 获取收款人,失败则执行添加 try { await getBeneficiary(); } catch (getErr) { if (getErr.message === "未找到收款人") { await addBeneficiary(); } else { throw getErr; // 非"未找到收款人"的错误,直接抛出 } } // 3. 执行转账请求 const transferResult = await requestTransfer(); // 向UI反馈成功 return { success: true, message: transferResult }; } catch (err) { // 任一环节失败,向UI反馈错误 return { success: false, message: err.message }; } } // 调用流程并更新UI handleTransferFlow().then(result => { if (result.success) { // 示例:更新UI显示成功消息 console.log(result.message); // 实际项目中替换为UI组件的状态更新,比如 setTransferStatus(result.message) } else { // 示例:更新UI显示错误消息 console.error("转账流程失败:", result.message); // 实际项目中替换为UI错误提示,比如 showErrorToast(result.message) } });
关键说明
- 所有API都通过Promise封装,确保异步操作的结果能被正确捕获
- 用
try/catch分层处理错误:针对"未找到收款人"的特定错误触发添加流程,其他错误直接向上抛出 - 最终通过返回包含
success和message的对象,让UI能清晰区分成功/失败状态,展示对应信息
内容的提问来源于stack exchange,提问作者Jagan Badiyar
相关产品推荐
相关产品推荐

