3b8e4d41a7
Which was reverted in commit032be73dbe. Originally commited in commit67bac0bce6. 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>
59 lines
1.8 KiB
Dart
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();
|
|
});
|
|
}
|