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

是否使用await?Dart中FlutterDownloader.enqueue返回的疑问

关于Dart代码中await使用的差异及返回值疑问解答

一、使用await和不使用await的核心差异

最关键的区别在于错误捕获范围:

  • 若使用await FlutterDownloader.enqueue(...).then(...),FlutterDownloader.enqueue抛出的异常会被外层try/catch捕获,最终进入catch块返回Err(e.toString())。
  • 若不使用await,直接返回FlutterDownloader.enqueue(...).then(...),这个Future内部抛出的异常不会被当前函数的try/catch捕获,而是直接作为返回结果的Future错误向外传递,走不到你写的catch逻辑里。

另外从可读性角度,用await能把链式调用改成更直观的同步写法,比如:

// 用await的写法更清晰
final taskId = await FlutterDownloader.enqueue(
  url: url,
  savedDir: targetDir,
  showNotification: true,
  openFileFromNotification: true,
  saveInPublicStorage: true,
);
return Ok(taskId != null);

和直接用then的链式调用功能等价,但逻辑复杂时可读性更高。

二、是否需要返回Future.value(Ok(false))?

不需要。因为你的函数用async修饰,Dart会自动把同步返回的Ok(false)包装成Future.value(Ok(false))。直接写return const Ok(false)就完全符合函数返回类型要求,不用手动包装。

内容的提问来源于stack exchange,提问作者Ουιλιαμ Αρκευα

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 01:33:13