问题:我正在RSS提要阅读器上构建应用程序。
提要:
- 有各种各样的项目,每个项目都是一篇文章,有一个URL。
- 每个URL都有开放的图形元数据,需要提取并且需要时间。
- 一旦URL打开图形元数据被加载,它需要在UI上的列表中显示。
现在我想并行运行2和3,我现在在代码中这样做:
Stream<News> _getNewsRssFeed(Categories selectedCategory) async* {
try {
final rssUrl = _getRssUrl(selectedCategory);
RssFeed feed = await _getRssFeed(rssUrl);
if (feed.items != null) {
for (int itemIndex = 0; itemIndex < feed.items!.length; itemIndex++) {
final item = feed.items![itemIndex];
try {
Future<News> news = _processRssFeedItem(item, feed);
news.then((value){
yield value; // This is not working
});
} catch (error) {
print("Error while parsing ${item.link} error = $error");
}
}
}
} catch (error) {
print("Error while parsing RssFeed url $error");
}
}
我在上面的代码中注释了问题行,你能告诉我这里最好的方法是什么吗?
基本上,news.then
返回Future,您不等待结果可用。
您可以通过将代码更改为
来更改它try {
final value = await _processRssFeedItem(item, feed);
yield value;
} catch (error) {
print("Error while parsing ${item.link} error = $error");
}