首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用函数时带await和不带await有什么不同?

调用函数时带await和不带await有什么不同?
EN

Stack Overflow用户
提问于 2021-07-20 18:29:03
回答 1查看 23关注 0票数 0

我来自一种使用线程而不是async/await的语言,我对await的用途感到困惑。

每个人都说await关键字告诉程序等待async函数完成,但在下面的代码中,我没有在doSmth()调用之前使用await,它们仍然会暂停执行:

代码语言:javascript
复制
import 'dart:io';

Future<String> _loadFromDisc() async {
  sleep(Duration(seconds: 1));
  return 'idfromdisc';
}

Future<String> _fetchNetworkData(String id) async {
  sleep(Duration(seconds: 1));
  return 'somedata';
}

class ProcessedData {
  ProcessedData(this._data);
  String _data;
}

void doSmth() async {
  print('doSmth started');
  sleep(Duration(seconds: 1));
  print('doSmth finished');
}

Future<ProcessedData> createData() async {
  doSmth();
  doSmth();
  print('calling loadFromDisc');
  final id = await _loadFromDisc();
  print('calling fetchNetworkData');
  final data = await _fetchNetworkData(id);
  print('done');
  return ProcessedData(data);
}

void main() {
  createData();
}

我的意思是,这是有道理的,如果所有的函数都是立即执行的,这会很奇怪,但是如果代码以同样的方式工作,为什么我们还需要await呢?

EN

回答 1

Stack Overflow用户

发布于 2021-07-20 18:33:30

想象一下,你有一个异步代码,它是什么异步的,如果它执行的代码太长,你可以转移到其他代码,这是为了防止冻结和低性能,你必须在这里从非常大的数据中获取数据,但如果你在没有等待的情况下这样做,这将是一个承诺,你将会有一个错误或不想要的结果,所以你必须等到它等待这个获取,然后继续,希望我已经说得很清楚了

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68453352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档