是否使用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,提问作者Ουιλιαμ Αρκευα
相关产品推荐
相关产品推荐

