Index: lib/src/async_memoizer.dart |
diff --git a/lib/src/async_memoizer.dart b/lib/src/async_memoizer.dart |
index 68a6c80e4fac0372e0bef576076aa599e22348c3..41c3dae87a46054708456ced01a04d582891cb07 100644 |
--- a/lib/src/async_memoizer.dart |
+++ b/lib/src/async_memoizer.dart |
@@ -31,17 +31,18 @@ import 'dart:async'; |
class AsyncMemoizer<T> { |
/// The future containing the method's result. |
/// |
- /// This will be `null` if [run] hasn't been called yet. |
- Future<T> _future; |
+ /// This can be accessed at any time, and will fire once [runOnce] is called. |
+ Future<T> get future => _completer.future; |
+ final _completer = new Completer(); |
kevmoo
2015/09/03 11:58:33
Completer<T>
|
/// Whether [run] has been called yet. |
- bool get hasRun => _future != null; |
+ bool get hasRun => _completer.isCompleted; |
/// Runs the function, [computation], if it hasn't been run before. |
/// |
/// If [run] has already been called, this returns the original result. |
Future<T> runOnce(computation()) { |
- if (_future == null) _future = new Future.sync(computation); |
- return _future; |
+ if (!hasRun) _completer.complete(new Future.sync(computation)); |
kevmoo
2015/09/03 11:58:33
new Future<T> ?
|
+ return future; |
} |
} |