我喜欢await forDart 中的构造。
如何使用常规 for 循环实现类似的功能?
就像是
// beware! fictional code.
var element = stream.next();
for(; stream.isEndReached(); element = stream.next()) {
// use element here
}
// or probably it will be like this, right?
var element = await stream.next();
for(; await stream.isEndReached(); element = await stream.next()) {
// use element here
}
Run Code Online (Sandbox Code Playgroud)
但我不知道用什么函数来代替next()和isEndReached()这里。如果您能给我一个与 完全一样的完整示例async for,那就太好了。
编辑:这是我要求这样做的实际原因:我想做这样的事情:
if (!stream.isEndReached()) {
var a = await stream.next();
// use a
}
if (!stream.isEndReached()) {
var b = await stream.next();
// use b
}
// have an arbitrary number of these
Run Code Online (Sandbox Code Playgroud)
我需要像这样一件一件地消耗物品。这就是为什么我要问我的组成.next()和.isEndReached()方法映射到流类中的哪些实际方法。
该异步包中包含一个StreamQueue可能做你想做的类。
另请参阅这篇很棒的文章http://news.dartlang.org/2016/04/unboxing-packages-async-part-3.html
StreamQueue 为流提供基于拉取的 API。
从上面提到的文章中截取的代码
void main() async {
var queue = new StreamQueue(new Stream.fromIterable([1, 2, 3]));
var first = queue.next;
var second = queue.next;
var third = queue.next;
print(await Future.wait([first, second, third])); // => [1, 2, 3]
}
Run Code Online (Sandbox Code Playgroud)
更新
WebStorm(使用 dartanalyzer 的一项功能)不会在尚未从该包中导入任何内容时为导入提供快速修复。如果您的源代码中没有引用包,它就不会读取包。正如我的回答中提到的那样StreamQueue来自async包。import 'package:async/async.dart';通常就足够了(将async.dart包的主入口点文件 ( )命名为与包相同的约定)并且所有导出的标识符在您的库中可用。否则,您可以搜索项目的源代码,WebStorm 还将搜索依赖项并显示包含StreamQueue该类的库。然后你可以导入这个文件。
| 归档时间: |
|
| 查看次数: |
3050 次 |
| 最近记录: |