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

Side by Side Diff: when/lib/when.dart

Issue 1400473008: Roll Observatory packages and add a roll script (Closed) Base URL: git@github.com:dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years, 2 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
« no previous file with comments | « web_components/pubspec.yaml ('k') | when/pubspec.yaml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1
2 library when;
3
4 import 'dart:async';
5
6 /// Registers callbacks on the result of a [callback], which may or may not be
7 /// a [Future].
8 ///
9 /// If [callback] returns a future, any of [onSuccess], [onError], or
10 /// [onComplete] that are provided are registered on the future,
11 /// and the resulting future is returned.
12 ///
13 /// Otherwise, if [callback] did not throw, if [onSuccess] is provided, it is
14 /// called with the with the result of [callback], and the return value of
15 /// [onSuccess] is captured.
16 ///
17 /// Otherwise, if [onError] was provided, it is called. It can take either
18 /// just an error, or a stack trace as well. If [onError] was not provided,
19 /// the error is not caught.
20 ///
21 /// [onComplete] is then called synchronously.
22 ///
23 /// The captured value is then returned.
24 when(callback, {onSuccess(result), onError, onComplete}) {
25 var result, hasResult = false;
26
27 try {
28 result = callback();
29 hasResult = true;
30 } catch (e, s) {
31 if (onError != null) {
32 if (onError is _Unary) {
33 onError(e);
34 } else if (onError is _Binary) {
35 onError(e, s);
36 } else {
37 throw new ArgumentError(
38 '"onError" must accept 1 or 2 arguments: $onError');
39 }
40 } else {
41 rethrow;
42 }
43 } finally {
44 if (result is Future) {
45 if (onSuccess != null) {
46 result = result.then(onSuccess);
47 }
48 if (onError != null) {
49 result = result.catchError(onError);
50 }
51 if (onComplete != null) {
52 result = result.whenComplete(onComplete);
53 }
54 } else {
55 if (hasResult) {
56 if (onSuccess != null) {
57 result = onSuccess(result);
58 }
59 }
60 if (onComplete != null) onComplete();
61 }
62 }
63
64 return result;
65 }
66
67 typedef _Unary(x);
68 typedef _Binary(x, y);
OLDNEW
« no previous file with comments | « web_components/pubspec.yaml ('k') | when/pubspec.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698