Files
sdk/tests/lib_2/async/async_await_sync_completer_test.dart
T
Florian Loitsch 3b8e4d41a7 Reapply "Run async functions immediately."
Which was reverted in commit 032be73dbe.
Originally commited in commit 67bac0bce6.
Original review URL: https://dart-review.googlesource.com/5263

Change-Id: Ic7333c29e502a3924dc6aade8ffa46fc8aa5b04a
Reviewed-on: https://dart-review.googlesource.com/38120
Commit-Queue: Florian Loitsch <floitsch@google.com>
Reviewed-by: William Hesse <whesse@google.com>
2018-02-02 15:50:16 +00:00

59 lines
1.8 KiB
Dart

// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:async';
import 'package:expect/expect.dart';
import 'package:async_helper/async_helper.dart';
import 'dart:async';
var events = [];
var delayedValue = new Completer();
var delayedError = new Completer();
foo() async {
// Because of this `await null` the function returns and lets the caller
// install handlers. When the function finishes, it can then synchronously
// propagate the values.
await null;
new Future.microtask(() => 'in microtask')
.then(events.add)
.then(delayedValue.complete);
return 'in async function';
}
bar() async {
// Because of this `await null` the function returns and lets the caller
// install handlers. When the function finishes, it can then synchronously
// propagate the values.
await null;
new Future.microtask(() => throw 'in microtask error')
.catchError(events.add)
.then(delayedError.complete);
throw 'in async function error';
}
void main() {
asyncStart();
var asyncValueFuture = foo().then(events.add);
var asyncErrorFuture = bar().catchError(events.add);
Future.wait(<Future>[
asyncValueFuture,
delayedValue.future,
asyncErrorFuture,
delayedError.future
]).then((_) {
// The body completed before nested microtask. So they should appear
// before the delayed functions. In other words, the async function should
// not unnecessarily delay the propagation of errors and values.
Expect.listEquals([
"in async function",
"in async function error",
"in microtask",
"in microtask error"
], events);
asyncEnd();
});
}