You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 21:15:31