2014-09-30 14:56:33 -04:00
|
|
|
library angular.core.facade.async;
|
|
|
|
|
|
|
|
import 'dart:async';
|
2015-03-24 13:45:39 -07:00
|
|
|
export 'dart:async' show Future, Stream, StreamController, StreamSubscription;
|
2014-09-30 14:56:33 -04:00
|
|
|
|
2014-10-10 15:44:56 -04:00
|
|
|
class PromiseWrapper {
|
2015-01-29 09:50:49 -08:00
|
|
|
static Future resolve(obj) => new Future.value(obj);
|
2014-09-30 14:56:33 -04:00
|
|
|
|
2015-05-19 12:48:00 -07:00
|
|
|
static Future reject(obj, stackTrace) => new Future.error(
|
2015-05-15 11:46:34 -07:00
|
|
|
obj,
|
2015-05-19 12:48:00 -07:00
|
|
|
stackTrace != null
|
|
|
|
? stackTrace
|
|
|
|
: obj is Error
|
|
|
|
? obj.stackTrace
|
|
|
|
: null);
|
2014-10-07 09:04:11 -04:00
|
|
|
|
2015-01-29 09:50:49 -08:00
|
|
|
static Future<List> all(List<Future> promises) => Future.wait(promises);
|
2014-10-07 09:04:11 -04:00
|
|
|
|
2015-01-29 09:50:49 -08:00
|
|
|
static Future then(Future promise, success(value), Function onError) {
|
2014-12-01 20:06:21 +01:00
|
|
|
if (success == null) return promise.catchError(onError);
|
2014-10-10 15:44:56 -04:00
|
|
|
return promise.then(success, onError: onError);
|
2014-10-07 09:04:11 -04:00
|
|
|
}
|
2014-12-05 18:30:45 -08:00
|
|
|
|
2015-02-25 17:43:33 -08:00
|
|
|
// 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);
|
|
|
|
}
|
|
|
|
|
2015-05-19 12:48:00 -07:00
|
|
|
static CompleterWrapper completer() => new CompleterWrapper(new Completer());
|
2014-12-11 11:36:05 -08:00
|
|
|
|
2015-05-12 16:28:57 +02:00
|
|
|
// TODO(vic): create a TimerWrapper
|
|
|
|
static Timer setTimeout(fn(), int millis)
|
|
|
|
=> new Timer(new Duration(milliseconds: millis), fn);
|
|
|
|
static void clearTimeout(Timer timer) {
|
|
|
|
timer.cancel();
|
|
|
|
}
|
|
|
|
|
|
|
|
static Timer setInterval(fn(), int millis) {
|
|
|
|
var interval = new Duration(milliseconds: millis);
|
|
|
|
return new Timer.periodic(interval, (Timer timer) { fn(); });
|
|
|
|
}
|
|
|
|
static void clearInterval(Timer timer) {
|
|
|
|
timer.cancel();
|
2014-12-11 11:36:05 -08:00
|
|
|
}
|
2015-02-06 08:57:49 +01:00
|
|
|
|
|
|
|
static bool isPromise(maybePromise) {
|
|
|
|
return maybePromise is Future;
|
|
|
|
}
|
2014-12-05 18:30:45 -08:00
|
|
|
}
|
|
|
|
|
2015-03-24 13:45:39 -07:00
|
|
|
class ObservableWrapper {
|
2015-05-08 19:51:19 -07:00
|
|
|
static StreamSubscription subscribe(Stream s, Function onNext,
|
|
|
|
[onError, onComplete]) {
|
|
|
|
return s.listen(onNext,
|
|
|
|
onError: onError, onDone: onComplete, cancelOnError: true);
|
2015-03-24 13:45:39 -07:00
|
|
|
}
|
|
|
|
|
2015-04-19 12:45:08 -07:00
|
|
|
static bool isObservable(obs) {
|
|
|
|
return obs is Stream;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void dispose(StreamSubscription s) {
|
|
|
|
s.cancel();
|
|
|
|
}
|
|
|
|
|
2015-04-14 14:34:41 -07:00
|
|
|
static void callNext(EventEmitter emitter, value) {
|
|
|
|
emitter.add(value);
|
2015-03-24 13:45:39 -07:00
|
|
|
}
|
|
|
|
|
2015-04-14 14:34:41 -07:00
|
|
|
static void callThrow(EventEmitter emitter, error) {
|
|
|
|
emitter.addError(error);
|
2015-03-24 13:45:39 -07:00
|
|
|
}
|
|
|
|
|
2015-04-14 14:34:41 -07:00
|
|
|
static void callReturn(EventEmitter emitter) {
|
|
|
|
emitter.close();
|
2015-03-24 13:45:39 -07:00
|
|
|
}
|
2015-04-14 14:34:41 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
class EventEmitter extends Stream {
|
|
|
|
StreamController<String> _controller;
|
2015-03-24 13:45:39 -07:00
|
|
|
|
2015-04-14 14:34:41 -07:00
|
|
|
EventEmitter() {
|
|
|
|
_controller = new StreamController.broadcast();
|
2015-03-24 13:45:39 -07:00
|
|
|
}
|
|
|
|
|
2015-05-08 19:51:19 -07:00
|
|
|
StreamSubscription listen(void onData(String line),
|
|
|
|
{void onError(Error error), void onDone(), bool cancelOnError}) {
|
2015-04-14 14:34:41 -07:00
|
|
|
return _controller.stream.listen(onData,
|
2015-05-08 19:51:19 -07:00
|
|
|
onError: onError, onDone: onDone, cancelOnError: cancelOnError);
|
2015-04-14 14:34:41 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
void add(value) {
|
|
|
|
_controller.add(value);
|
|
|
|
}
|
|
|
|
|
|
|
|
void addError(error) {
|
|
|
|
_controller.addError(error);
|
|
|
|
}
|
|
|
|
|
|
|
|
void close() {
|
|
|
|
_controller.close();
|
2015-03-24 13:45:39 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-05-19 12:48:00 -07:00
|
|
|
class CompleterWrapper {
|
2015-01-29 09:50:49 -08:00
|
|
|
final Completer c;
|
2014-12-11 11:36:05 -08:00
|
|
|
|
2015-05-19 12:48:00 -07:00
|
|
|
CompleterWrapper(this.c);
|
2014-12-05 18:30:45 -08:00
|
|
|
|
2015-01-29 09:50:49 -08:00
|
|
|
Future get promise => c.future;
|
2014-12-11 11:36:05 -08:00
|
|
|
|
2015-02-25 12:46:50 +01:00
|
|
|
void resolve(v) {
|
2014-12-11 11:36:05 -08:00
|
|
|
c.complete(v);
|
|
|
|
}
|
|
|
|
|
2015-05-19 12:48:00 -07:00
|
|
|
void reject(error, stack) {
|
|
|
|
if (stack == null && error is Error) {
|
|
|
|
stack = error.stackTrace;
|
2015-05-15 11:46:34 -07:00
|
|
|
}
|
2015-05-19 12:48:00 -07:00
|
|
|
c.completeError(error, stack);
|
2014-12-11 11:36:05 -08:00
|
|
|
}
|
2014-09-30 14:56:33 -04:00
|
|
|
}
|