1
A
回答
1
你可以用流做到這一點
import 'dart:async' show Stream, StreamController;
main() {
StreamController<int> sc = new StreamController<int>();
sc.stream.listen((e) => print(e));
for(int i = 0; i < 10; i++) {
sc.add(i);
}
}
嘗試在DartPad
參見
- https://www.dartlang.org/docs/tutorials/streams/
- https://www.dartlang.org/articles/creating-streams/
您不能在Dart中「等待」,特別是在瀏覽器中。
Dart還有async*
生成器函數可用於創建流。例如見Async/Await feature in Dart 1.8
A 「天真」 翻譯形式await for(var event in someStream)
import 'dart:async';
main() {
StreamController<int> sc = new StreamController<int>();
startProcessing(sc.stream);
for(int i = 0; i < 10; i++) {
sc.add(i);
}
}
Future startProcessing(Stream stream) async {
StreamSubscription subscr;
subscr = stream.listen((value) {
subscr.pause();
new Future.delayed(new Duration(milliseconds: 500)).then((_) {
print('Processed $value');
subscr.resume();
});
});
//await for(int value in stream) {
// await new Future.delayed(new Duration(milliseconds: 500)).then((_) {
// print('Processed $value');
// });
//}
}
實際實現採用不同的方法
的方式的await-for循環實現使用一個事件緩衝區(以避免重複暫停和恢復)。
見https://github.com/dart-lang/sdk/issues/24956#issuecomment-157328619
相關問題
- 1. 原生擴展飛鏢
- 2. 飛鏢中的飛鏢websocket:io and dart:html
- 3. 飛鏢Web_Audio飛鏢1.6
- 4. 飛鏢中的urlencoding
- 5. 飛鏢 - NumberFormat的
- 6. 飛鏢與原生移動庫調用
- 7. @飛鏢代碼
- 8. 飛鏢基準?
- 9. 與飛鏢PointerLock
- 10. 飛鏢:干將
- 11. 飛鏢單元測試 - 始終通過
- 12. 如何開始飛鏢圖像處理?
- 13. 飛鏢中的關機鉤?
- 14. 飛鏢中的PUT請求
- 15. 解析飛鏢中的JSON
- 16. 飛鏢中的「matchMedia」支持
- 17. 在飛鏢編輯器中自動生成飛鏢
- 18. 使用沒有飛鏢編輯器的飛鏢問題
- 19. 飛鏢中有會議嗎?
- 20. 在飛鏢中解析plist
- 21. 飛鏢:長計算
- 22. 飛鏢角劍道
- 23. 導入飛鏢包
- 24. net :: ERR_UNSAFE_PORT在飛鏢
- 25. 有使用飛鏢
- 26. JSON_OBJECT和飛鏢:鏡
- 27. 造型和飛鏢
- 28. 飛鏢EventSource錯誤
- 29. 飛鏢庫佈局
- 30. 的NodeJS http.get的飛鏢
「指日可待」這個作品,是不是從一個可能只是裏面的等待身體和流值將被緩衝的文檔清晰。 DartPad:https://dartpad.dartlang.org/470e2e2429c3c065f5e5 如果您將其編輯爲僅包含一次處理一個值,那麼願意接受您的答案。 –
當然,「等待」是更好的語法,但否則它是一樣的。 –
如果它是一樣的,你將如何實現它而不使用'await for'語法?關鍵部分是,在處理完前一個值之前未處理下一個值(可能會異步執行) –