在 dart 中调试时如何访问 Future 值?

Posted

技术标签:

【中文标题】在 dart 中调试时如何访问 Future 值?【英文标题】:How to access Future values while debugging in dart? 【发布时间】:2020-08-10 02:02:32 【问题描述】:

请点赞:https://github.com/dart-lang/sdk/issues/40198

我想知道如何在使用 vs-code 进行调试时获得未来的价值?现在我需要引入另一个临时变量来让调试器等待语句。这就是我目前访问值的方式:

 Future<void> disconnect2() async 
    var conn = await isConnected;
    if (conn) await internalDisconnect();
  

但我想写以下内容:

  Future<void> disconnect() async 
    if (await isConnected) await internalDisconnect();
  

并且仍然可以使用调试器访问isConnected 的值。

到目前为止我尝试了什么:

尝试将表达式(await isConnected) 添加到手表。 试图在调试控制台中评估表达式(await isConnected)。 尝试将表达式isConnected 添加到手表中。 试图在调试控制台中评估表达式isConnected。 试图通过将鼠标悬停在实例上来访问该值。在屏幕截图中它是空的,但大多数时候我只能访问未来的对象。

有没有什么简单的方法可以在调试时访问 future 的值?

【问题讨论】:

【参考方案1】:

在未等待和加载的情况下,您看不到未来值的值。其原因是,future 类型正在等待数据,因此它为未来值保留了部分内存。您只有在获得值 f.e. 后才能访问它。来自 REST API 的值。 您可以使用 then 方法并查看那里的值。

someFuture(arg).then((erg) => print(erg));

【讨论】:

是的,感谢您的回答。我知道未来是什么,但是在 vs 代码中必须有一种简单的方法来在调试时获得价值。例如,在 C# 中,如果您将“任务”(相当于 Dart 中的 Future)添加到手表中,它会为您等待它们。

以上是关于在 dart 中调试时如何访问 Future 值?的主要内容,如果未能解决你的问题,请参考以下文章

异步编程之 Future

如何根据您在 Dart 中无法控制的 Stream 返回 Future?

Future dart/flutter 中的返回值

如何在 dart 的 Future 函数中从 JSON 创建一个类对象?

当我打印进行调试时,它显示类型--> Flutter 中的“Future<dynamic>”实例

Dart异步编程--Future