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

Side by Side Diff: sdk/lib/async/future_impl.dart

Issue 12213092: Rework Timer interface. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address comments. Created 7 years, 10 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « sdk/lib/async/future.dart ('k') | sdk/lib/async/stream_impl.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of dart.async; 5 part of dart.async;
6 6
7 deprecatedFutureValue(_FutureImpl future) => 7 deprecatedFutureValue(_FutureImpl future) =>
8 future._isComplete ? future._resultOrListeners : null; 8 future._isComplete ? future._resultOrListeners : null;
9 9
10 10
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 return _handleError(f, test); 172 return _handleError(f, test);
173 } 173 }
174 } 174 }
175 175
176 Future<T> whenComplete(action()) { 176 Future<T> whenComplete(action()) {
177 _WhenFuture<T> whenFuture = new _WhenFuture<T>(action); 177 _WhenFuture<T> whenFuture = new _WhenFuture<T>(action);
178 if (!_isComplete) { 178 if (!_isComplete) {
179 _addListener(whenFuture); 179 _addListener(whenFuture);
180 } else if (_hasValue) { 180 } else if (_hasValue) {
181 T value = _resultOrListeners; 181 T value = _resultOrListeners;
182 new Timer(0, (_) { 182 Timer.run(() {
183 whenFuture._sendValue(value); 183 whenFuture._sendValue(value);
184 }); 184 });
185 } else { 185 } else {
186 assert(_hasError); 186 assert(_hasError);
187 _clearUnhandledError(); 187 _clearUnhandledError();
188 AsyncError error = _resultOrListeners; 188 AsyncError error = _resultOrListeners;
189 new Timer(0, (_) { 189 Timer.run(() {
190 whenFuture._sendError(error); 190 whenFuture._sendError(error);
191 }); 191 });
192 } 192 }
193 return whenFuture; 193 return whenFuture;
194 } 194 }
195 195
196 /** Handle a late listener on a completed future with a value. */ 196 /** Handle a late listener on a completed future with a value. */
197 Future _handleValue(onValue(var value)) { 197 Future _handleValue(onValue(var value)) {
198 assert(_hasValue); 198 assert(_hasValue);
199 _ThenFuture thenFuture = new _ThenFuture(onValue); 199 _ThenFuture thenFuture = new _ThenFuture(onValue);
200 T value = _resultOrListeners; 200 T value = _resultOrListeners;
201 new Timer(0, (_) { thenFuture._sendValue(value); }); 201 Timer.run(() { thenFuture._sendValue(value); });
202 return thenFuture; 202 return thenFuture;
203 } 203 }
204 204
205 /** Handle a late listener on a completed future with an error. */ 205 /** Handle a late listener on a completed future with an error. */
206 Future _handleError(onError(AsyncError error), bool test(error)) { 206 Future _handleError(onError(AsyncError error), bool test(error)) {
207 assert(_hasError); 207 assert(_hasError);
208 _clearUnhandledError(); 208 _clearUnhandledError();
209 AsyncError error = _resultOrListeners; 209 AsyncError error = _resultOrListeners;
210 _CatchErrorFuture errorFuture = new _CatchErrorFuture(onError, test); 210 _CatchErrorFuture errorFuture = new _CatchErrorFuture(onError, test);
211 new Timer(0, (_) { errorFuture._sendError(error); }); 211 Timer.run(() { errorFuture._sendError(error); });
212 return errorFuture; 212 return errorFuture;
213 } 213 }
214 214
215 Stream<T> asStream() => new Stream.fromFuture(this); 215 Stream<T> asStream() => new Stream.fromFuture(this);
216 216
217 void _setValue(T value) { 217 void _setValue(T value) {
218 if (_isComplete) throw new StateError("Future already completed"); 218 if (_isComplete) throw new StateError("Future already completed");
219 _FutureListener listeners = _removeListeners(); 219 _FutureListener listeners = _removeListeners();
220 _state = _VALUE; 220 _state = _VALUE;
221 _resultOrListeners = value; 221 _resultOrListeners = value;
(...skipping 19 matching lines...) Expand all
241 listeners = listener._nextListener; 241 listeners = listener._nextListener;
242 listener._nextListener = null; 242 listener._nextListener = null;
243 listener._sendError(error); 243 listener._sendError(error);
244 } while (listeners != null); 244 } while (listeners != null);
245 } 245 }
246 246
247 void _scheduleUnhandledError() { 247 void _scheduleUnhandledError() {
248 _state |= _UNHANDLED_ERROR; 248 _state |= _UNHANDLED_ERROR;
249 // Wait for the rest of the current event's duration to see 249 // Wait for the rest of the current event's duration to see
250 // if a subscriber is added to handle the error. 250 // if a subscriber is added to handle the error.
251 new Timer(0, (_) { 251 Timer.run(() {
252 if (_hasUnhandledError) { 252 if (_hasUnhandledError) {
253 // No error handler has been added since the error was set. 253 // No error handler has been added since the error was set.
254 _clearUnhandledError(); 254 _clearUnhandledError();
255 AsyncError error = _resultOrListeners; 255 AsyncError error = _resultOrListeners;
256 print("Uncaught Error: ${error.error}"); 256 print("Uncaught Error: ${error.error}");
257 if (error.stackTrace != null) { 257 if (error.stackTrace != null) {
258 print("Stack Trace:\n${error.stackTrace}\n"); 258 print("Stack Trace:\n${error.stackTrace}\n");
259 } 259 }
260 throw error.error; 260 throw error.error;
261 } 261 }
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 Future catchError(function(AsyncError error), {bool test(var error)}) { 521 Future catchError(function(AsyncError error), {bool test(var error)}) {
522 return _future.catchError(function, test: test); 522 return _future.catchError(function, test: test);
523 } 523 }
524 524
525 Future<T> whenComplete(action()) { 525 Future<T> whenComplete(action()) {
526 return _future.whenComplete(action); 526 return _future.whenComplete(action);
527 } 527 }
528 528
529 Stream<T> asStream() => new Stream.fromFuture(_future); 529 Stream<T> asStream() => new Stream.fromFuture(_future);
530 } 530 }
OLDNEW
« no previous file with comments | « sdk/lib/async/future.dart ('k') | sdk/lib/async/stream_impl.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698