需要在dart中使用流并行异步操作



问题:我正在RSS提要阅读器上构建应用程序。

提要:

  1. 有各种各样的项目,每个项目都是一篇文章,有一个URL。
  2. 每个URL都有开放的图形元数据,需要提取并且需要时间。
  3. 一旦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");
}

最新更新