【问题标题】:Dartlang- How do I pass user input to an async funtion?Dartlang-如何将用户输入传递给异步函数?
【发布时间】:2021-04-02 07:25:06
【问题描述】:

我正在使用 Dart 和全新的异步编程。我希望将用户输入的文本字段提交给 API 异步函数,然后返回结果。我根本无法理解它,也无法在任何地方找到可以提供帮助的信息。我认为我的问题是我以某种方式错误地结合了同步和异步编程?

(我正在使用 VSCode)

非常感谢任何帮助。

import 'dart:io';
import 'dart:async';

Future<String> createRegDetailsMessage(String regFromUser) async {
  var regDetails = await fetchRegDetails(regFromUser);
  return 'Retrieved Data: $regDetails';
}

Future<String> fetchRegDetails(String regPassedOn) =>
    // Imagine that this function is
    // more complex and slow.
    Future.delayed(
      Duration(seconds: 2),
      () => regPassedOn,
    );

Future<void> searchForDetails(String foo) async {
  print('Searching for Vehicle information...');
  print(await createRegDetailsMessage(foo));
}

Future<void> main() async {
  print('Registraion to be found:');
  var regToFind = stdin.readLineSync();
  print('$regToFind - confirmed');
  await searchForDetails(regToFind);
}

来自 VScode 的错误消息:全局评估需要已加载线程

【问题讨论】:

  • var regToFind = stdin.readLineSync(); print( await fetchRegDetails(regToFind)); 不起作用?
  • 我得到这个错误:Registraion to be found: abc123 Global evaluation requires a thread to have been loaded
  • abc123 是什么?
  • abc123-用户输入。它只是一个注册的通用测试字符串表示
  • 我是不是误会了什么?

标签: flutter dart asynchronous


【解决方案1】:

谢谢@pskink 和@Mol0ko。在您的 cmets 和大量搜索之后,我发现代码是正确的.....问题出在 VSCODE 上。

VSCode 无法处理 - stdin.readLineSync();

通过终端运行代码按预期工作。

这是一个讨论问题的 SO 页面的链接 var regToFind = stdin.readLineSync();

Error in using Stdin.readLineSync(); in dart

这里还有一个谷歌小组讨论的链接-https://groups.google.com/a/dartlang.org/g/misc/c/RYBaw1U-aNo

【讨论】:

    猜你喜欢
    • 2021-07-16
    • 2020-08-03
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 2021-04-28
    • 2020-01-04
    • 2020-05-22
    相关资源
    最近更新 更多