2015-08-12 23:41:19 +00:00
|
|
|
library angular2.core.facade.async;
|
2014-09-30 18:56:33 +00:00
|
|
|
|
|
|
|
|
import 'dart:async';
|
2015-10-14 16:41:15 +00:00
|
|
|
export 'dart:async' show Stream, StreamController, StreamSubscription;
|
2014-09-30 18:56:33 +00:00
|
|
|
|
2015-10-14 16:41:15 +00:00
|
|
|
export 'promise.dart';
|
2015-05-19 14:47:30 +00:00
|
|
|
|
|
|
|
|
class TimerWrapper {
|
2015-05-29 17:42:47 +00:00
|
|
|
static Timer setTimeout(fn(), int millis) =>
|
|
|
|
|
new Timer(new Duration(milliseconds: millis), fn);
|
2015-05-12 14:28:57 +00:00
|
|
|
static void clearTimeout(Timer timer) {
|
|
|
|
|
timer.cancel();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static Timer setInterval(fn(), int millis) {
|
|
|
|
|
var interval = new Duration(milliseconds: millis);
|
2015-05-29 17:42:47 +00:00
|
|
|
return new Timer.periodic(interval, (Timer timer) {
|
|
|
|
|
fn();
|
|
|
|
|
});
|
2015-05-12 14:28:57 +00:00
|
|
|
}
|
2015-08-04 19:05:30 +00:00
|
|
|
|
2015-05-12 14:28:57 +00:00
|
|
|
static void clearInterval(Timer timer) {
|
|
|
|
|
timer.cancel();
|
2014-12-11 19:36:05 +00:00
|
|
|
}
|
2014-12-06 02:30:45 +00:00
|
|
|
}
|
|
|
|
|
|
2015-03-24 20:45:39 +00:00
|
|
|
class ObservableWrapper {
|
2016-02-19 19:49:31 +00:00
|
|
|
static StreamSubscription subscribe/*<T>*/(Stream s, onNext(/*=T*/ value),
|
2015-05-09 02:51:19 +00:00
|
|
|
[onError, onComplete]) {
|
|
|
|
|
return s.listen(onNext,
|
|
|
|
|
onError: onError, onDone: onComplete, cancelOnError: true);
|
2015-03-24 20:45:39 +00:00
|
|
|
}
|
|
|
|
|
|
2015-04-19 19:45:08 +00:00
|
|
|
static bool isObservable(obs) {
|
|
|
|
|
return obs is Stream;
|
|
|
|
|
}
|
|
|
|
|
|
2015-10-19 21:41:15 +00:00
|
|
|
/**
|
|
|
|
|
* Returns whether `emitter` has any subscribers listening to events.
|
|
|
|
|
*/
|
|
|
|
|
static bool hasSubscribers(EventEmitter emitter) {
|
|
|
|
|
return emitter._controller.hasListener;
|
|
|
|
|
}
|
|
|
|
|
|
2015-04-19 19:45:08 +00:00
|
|
|
static void dispose(StreamSubscription s) {
|
|
|
|
|
s.cancel();
|
|
|
|
|
}
|
|
|
|
|
|
2015-11-16 07:58:59 +00:00
|
|
|
@Deprecated('Use callEmit() instead')
|
2015-04-14 21:34:41 +00:00
|
|
|
static void callNext(EventEmitter emitter, value) {
|
|
|
|
|
emitter.add(value);
|
2015-03-24 20:45:39 +00:00
|
|
|
}
|
2015-12-02 18:35:51 +00:00
|
|
|
|
2015-11-16 07:58:59 +00:00
|
|
|
static void callEmit(EventEmitter emitter, value) {
|
|
|
|
|
emitter.add(value);
|
|
|
|
|
}
|
2015-03-24 20:45:39 +00:00
|
|
|
|
2015-10-25 01:48:43 +00:00
|
|
|
static void callError(EventEmitter emitter, error) {
|
2015-04-14 21:34:41 +00:00
|
|
|
emitter.addError(error);
|
2015-03-24 20:45:39 +00:00
|
|
|
}
|
|
|
|
|
|
2015-10-25 01:48:43 +00:00
|
|
|
static void callComplete(EventEmitter emitter) {
|
2015-04-14 21:34:41 +00:00
|
|
|
emitter.close();
|
2015-03-24 20:45:39 +00:00
|
|
|
}
|
2015-11-02 17:58:42 +00:00
|
|
|
|
|
|
|
|
static Stream fromPromise(Future f) {
|
|
|
|
|
return new Stream.fromFuture(f);
|
|
|
|
|
}
|
2015-11-02 19:57:31 +00:00
|
|
|
|
|
|
|
|
static Future toPromise(Stream s) {
|
|
|
|
|
return s.single;
|
|
|
|
|
}
|
2015-04-14 21:34:41 +00:00
|
|
|
}
|
|
|
|
|
|
2015-10-25 01:48:43 +00:00
|
|
|
class EventEmitter<T> extends Stream<T> {
|
2016-01-22 02:13:58 +00:00
|
|
|
StreamController<T> _controller;
|
2015-03-24 20:45:39 +00:00
|
|
|
|
2015-10-19 21:41:15 +00:00
|
|
|
/// Creates an instance of [EventEmitter], which depending on [isAsync],
|
|
|
|
|
/// delivers events synchronously or asynchronously.
|
|
|
|
|
EventEmitter([bool isAsync = true]) {
|
2016-01-22 02:13:58 +00:00
|
|
|
_controller = new StreamController<T>.broadcast(sync: !isAsync);
|
2015-03-24 20:45:39 +00:00
|
|
|
}
|
|
|
|
|
|
2016-01-22 02:13:58 +00:00
|
|
|
StreamSubscription<T> listen(void onData(T event),
|
|
|
|
|
{Function onError, void onDone(), bool cancelOnError}) {
|
2015-04-14 21:34:41 +00:00
|
|
|
return _controller.stream.listen(onData,
|
2015-05-09 02:51:19 +00:00
|
|
|
onError: onError, onDone: onDone, cancelOnError: cancelOnError);
|
2015-04-14 21:34:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void add(value) {
|
|
|
|
|
_controller.add(value);
|
|
|
|
|
}
|
2015-12-02 18:35:51 +00:00
|
|
|
|
2015-11-16 07:58:59 +00:00
|
|
|
void emit(value) {
|
|
|
|
|
_controller.add(value);
|
|
|
|
|
}
|
2015-04-14 21:34:41 +00:00
|
|
|
|
|
|
|
|
void addError(error) {
|
|
|
|
|
_controller.addError(error);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void close() {
|
|
|
|
|
_controller.close();
|
2015-03-24 20:45:39 +00:00
|
|
|
}
|
|
|
|
|
}
|
2015-10-25 01:48:43 +00:00
|
|
|
|
|
|
|
|
//todo(robwormald): maybe fix in ts2dart?
|
|
|
|
|
class Subject<T> extends Stream<T> {
|
2016-01-22 02:13:58 +00:00
|
|
|
StreamController<T> _controller;
|
2015-10-25 01:48:43 +00:00
|
|
|
|
|
|
|
|
Subject([bool isAsync = true]) {
|
2016-01-22 02:13:58 +00:00
|
|
|
_controller = new StreamController<T>.broadcast(sync: !isAsync);
|
2015-10-25 01:48:43 +00:00
|
|
|
}
|
|
|
|
|
|
2016-01-22 02:13:58 +00:00
|
|
|
StreamSubscription<T> listen(void onData(T data),
|
|
|
|
|
{Function onError, void onDone(), bool cancelOnError}) {
|
2015-10-25 01:48:43 +00:00
|
|
|
return _controller.stream.listen(onData,
|
|
|
|
|
onError: onError, onDone: onDone, cancelOnError: cancelOnError);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void add(value) {
|
|
|
|
|
_controller.add(value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void addError(error) {
|
|
|
|
|
_controller.addError(error);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void close() {
|
|
|
|
|
_controller.close();
|
|
|
|
|
}
|
|
|
|
|
}
|