Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(69)

Unified Diff: packages/quiver/lib/src/async/iteration.dart

Issue 2989763002: Update charted to 0.4.8 and roll (Closed)
Patch Set: Removed Cutch from list of reviewers Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « packages/quiver/lib/src/async/future_stream.dart ('k') | packages/quiver/lib/src/async/metronome.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: packages/quiver/lib/src/async/iteration.dart
diff --git a/packages/quiver/lib/src/async/iteration.dart b/packages/quiver/lib/src/async/iteration.dart
index 4132573ac9bfa9583f8eee2bdcdf1186072d82f4..d68affa149357246756634f42e57a35e70fd8665 100644
--- a/packages/quiver/lib/src/async/iteration.dart
+++ b/packages/quiver/lib/src/async/iteration.dart
@@ -14,56 +14,49 @@
part of quiver.async;
-/**
- * An asynchronous callback that returns a value.
- */
+/// An asynchronous callback that returns a value.
typedef Future<T> AsyncAction<T>(e);
-/**
- * An asynchronous funcuntion that combines an element [e] with a previous value
- * [previous], for use with [reduceAsync].
- */
+/// An asynchronous funcuntion that combines an element [e] with a previous
+/// value [previous], for use with [reduceAsync].
typedef Future<T> AsyncCombiner<T>(T previous, e);
-/**
- * Calls [action] for each item in [iterable] in turn, waiting for the Future
- * returned by action to complete.
- *
- * If the Future completes to [true], iteration continues.
- *
- * The Future returned completes to [true] if the entire iterable was processed,
- * otherwise [false].
- */
+/// Calls [action] for each item in [iterable] in turn, waiting for the Future
+/// returned by action to complete.
+///
+/// If the Future completes to [true], iteration continues.
+///
+/// The Future returned completes to [true] if the entire iterable was
+/// processed, otherwise [false].
Future doWhileAsync(Iterable iterable, AsyncAction<bool> action) =>
_doWhileAsync(iterable.iterator, action);
-Future _doWhileAsync(
- Iterator iterator, AsyncAction<bool> action) => (iterator.moveNext())
- ? action(iterator.current).then((bool result) =>
- (result) ? _doWhileAsync(iterator, action) : new Future.value(false))
- : new Future.value(true);
+Future _doWhileAsync(Iterator iterator, AsyncAction<bool> action) async {
+ if (iterator.moveNext()) {
+ return await action(iterator.current)
+ ? _doWhileAsync(iterator, action)
+ : false;
+ }
+ return true;
+}
-/**
- * Reduces a collection to a single value by iteratively combining elements
- * of the collection using the provided [combine] function. Similar to
- * [Iterable.reduce], except that [combine] is an async function that returns a
- * [Future].
- */
+/// Reduces a collection to a single value by iteratively combining elements of
+/// the collection using the provided [combine] function. Similar to
+/// [Iterable.reduce], except that [combine] is an async function that returns
+/// a [Future].
Future reduceAsync(Iterable iterable, initialValue, AsyncCombiner combine) =>
_reduceAsync(iterable.iterator, initialValue, combine);
-Future _reduceAsync(Iterator iterator, currentValue, AsyncCombiner combine) {
+Future _reduceAsync(Iterator iterator, current, AsyncCombiner combine) async {
if (iterator.moveNext()) {
- return combine(currentValue, iterator.current)
- .then((result) => _reduceAsync(iterator, result, combine));
+ var result = await combine(current, iterator.current);
+ return _reduceAsync(iterator, result, combine);
}
- return new Future.value(currentValue);
+ return current;
}
-/**
- * Schedules calls to [action] for each element in [iterable]. No more than
- * [maxTasks] calls to [action] will be pending at once.
- */
+/// Schedules calls to [action] for each element in [iterable]. No more than
+/// [maxTasks] calls to [action] will be pending at once.
Future forEachAsync(Iterable iterable, AsyncAction action, {int maxTasks: 1}) {
if (maxTasks == null || maxTasks < 1) {
throw new ArgumentError("maxTasks must be greater than 0, was: $maxTasks");
@@ -92,16 +85,17 @@ Future forEachAsync(Iterable iterable, AsyncAction action, {int maxTasks: 1}) {
if (!scheduleTask() && pending == 0) {
completer.complete();
}
- }).catchError((e) {
+ }).catchError((e, stack) {
if (failed) return;
failed = true;
- completer.completeError(e);
+ completer.completeError(e, stack);
});
});
return true;
}
return false;
}
+
while (scheduleTask()) {}
return completer.future;
}
« no previous file with comments | « packages/quiver/lib/src/async/future_stream.dart ('k') | packages/quiver/lib/src/async/metronome.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698