library angular2.core.facade.promise; import 'dart:async'; import 'dart:async' as async; class PromiseWrapper { static Future/**/ resolve/**/(dynamic /*=T*/ obj) => new Future.value(obj); static Future/**/ reject/**/(dynamic /*=T*/ obj, Object stackTrace) => new Future.error(obj, stackTrace != null ? stackTrace : obj is Error ? (obj as Error).stackTrace : null); static Future*/> all/**/(List promises) { return Future .wait(promises.map((p) => p is Future ? p as Future/**/ : new Future/**/.value(p))); } static Future/**/ then/**/(Future/**/ promise, dynamic /*=R*/ success(dynamic /*=T*/ value), [Function onError]) { if (success == null) return promise.catchError(onError); return promise.then(success, onError: onError); } static Future/**/ wrap/**/(dynamic /*=T*/ fn()) { return new Future(fn); } // Note: We can't rename this method to `catch`, as this is not a valid // method name in Dart. static Future catchError(Future promise, Function onError) { return promise.catchError(onError); } static void scheduleMicrotask(fn) { async.scheduleMicrotask(fn); } static bool isPromise(obj) { return obj is Future; } static PromiseCompleter/**/ completer/**/() => new PromiseCompleter(); } class PromiseCompleter { final Completer c = new Completer(); Future get promise => c.future; void resolve(v) { c.complete(v); } void reject(error, stack) { if (stack == null && error is Error) { stack = error.stackTrace; } c.completeError(error, stack); } }