【问题标题】:Dart - returning a result from an async functionDart - 从异步函数返回结果
【发布时间】:2020-12-28 08:57:51
【问题描述】:

我在 dart 中尝试异步编程时偶然发现了一个问题,当我在 Future.delayed 函数中放入 return 语句时,它似乎没有返回值。

 void main() {
  perform();
}

void perform() async {
  String result = await firstTask();
  finalTask(result);
}
Future firstTask() async {
  Duration duration = Duration(seconds: 4);
  String result = 'task 2 data';
  await Future.delayed(duration, () {
    print('First Task Completed');
    return result;
  });
}
void finalTask(String result) {
  print('final task completed and returned $result');
}

但如果我把返回结果; Future.delayed 函数之外的语句,它将其值返回给任务 3。比如,

    void main() {
  perform();
}

void perform() async {
  String result = await firstTask();
  finalTask(result);
}

Future firstTask() async {
  Duration duration = Duration(seconds: 4);
  String result = 'task 2 data';
  await Future.delayed(duration, () {
    print('First Task Completed');
  });
  return result;
}

void finalTask(String result) {
  print('final task completed and returned $result');
}

【问题讨论】:

  • return Future.delayed(duration, () { print('First Task Completed'); return result; );

标签: flutter asynchronous dart


【解决方案1】:

您的第一个任务没有任何返回语句。 IDE 应该会警告您。要修复它,您必须这样做

Future firstTask() async {
  Duration duration = Duration(seconds: 4);
  String result = 'task 2 data';
  return await Future.delayed(duration, () {
    print('First Task Completed');
    return result;
  });
}

或者

Future firstTask() { // No async here
  Duration duration = Duration(seconds: 4);
  String result = 'task 2 data';
  return Future.delayed(duration, () {
    print('First Task Completed');
    return result;
  });
}

【讨论】:

    猜你喜欢
    • 2022-12-22
    • 2016-03-11
    • 1970-01-01
    • 2020-03-15
    • 2017-07-02
    • 2019-09-30
    • 2021-07-04
    • 2020-11-04
    • 2020-12-24
    相关资源
    最近更新 更多