作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用异步方法从网站获取网址列表。
获得网址列表后,我尝试在另一种异步方法中使用这些网址。
这是获取网址的方法:
void _getData() async {
final response =
await http.get('https://www.whateverurl');
print(response.statusCode);
dom.Document document = parser.parse(response.body);
final elements2 = document.getElementsByClassName('image-card-wrapper');
setState(() {
//fetches links as /tiger /catalina etc.
urlList = elements2.map((element) async {
url = 'https://www.whateverurl' +
element.getElementsByTagName('a')[0].attributes['href'];
print(element.getElementsByTagName('a')[0].attributes['href']);
return url;
}).toList();
await _tryFetch(urlList);
});
}
_tryFetch(List urls) async {
String e = '';
for (var item in urls) {
try {
final response2 = await http.get(item);
dom.Document document2 = parser.parse(response2.body);
final elements = document2.getElementsByClassName('sqs-block-content');
elements.forEach((element) {
if (element.getElementsByTagName('li').isNotEmpty) {
List a = element.getElementsByTagName('li');
print(a.length);
for (var i = 0; i < a.length; i++) {
var z = a[i].children[0].text ?? '...';
e = e + z.toString();
}
}
setState(() {
tekniskInfo.add(e);
print(tekniskInfo);
});
});
} on Exception catch (_) {
print('elele');
}
}
}
@override
void initState() {
_getData();
super.initState();
}
最佳答案
前言
async
的函数都将返回Future await
函数的结果
Future<String> foo() => ...;
Future<void> bar() {
final String = await foo();
}
...
await bar(); //somewhere else
...
_getData()
中看到错误-您无法使setState(fn)的函数参数异步,所以接下来是错误代码
setState(() {
await foo(); //Error! - you can't await Future in synchronous function
});
setState
来缓解这种情况
void _getData() async {
...
await _tryFetch();
...
setState((){});
}
List<Future<String>> urlList = elements2.map((element) async {...
_tryFetch(List urls) async {
String e = '';
for (var item in urls) {
try {
final response2 = await http.get(await item); //each is Future<String> you need to wait
async
匿名函数放入map(...)
List<String> urlList = elements2.map((element) {...
,无需等待每个列表项
关于flutter - 如何在另一个异步函数中使用异步将来列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62378128/
我是一名优秀的程序员,十分优秀!