| Index: sdk/lib/_internal/compiler/js_lib/async_patch.dart
|
| diff --git a/sdk/lib/_internal/compiler/js_lib/async_patch.dart b/sdk/lib/_internal/compiler/js_lib/async_patch.dart
|
| index 88ab1d0479a5dbbf8f3f721c8f460868ec73f943..e0813ad617708b28d9658366c8ed923d710ef781 100644
|
| --- a/sdk/lib/_internal/compiler/js_lib/async_patch.dart
|
| +++ b/sdk/lib/_internal/compiler/js_lib/async_patch.dart
|
| @@ -63,10 +63,9 @@ class _AsyncRun {
|
| JS('', '#.firstChild ? #.removeChild(#): #.appendChild(#)',
|
| div, div, span, div, span);
|
| };
|
| -
|
| + } else if (JS('', 'self.setImmediate') != null) {
|
| + return _scheduleImmediateWithSetImmediate;
|
| }
|
| - // TODO(9002): don't use the Timer to enqueue the immediate callback.
|
| - // Also check for other JS options like setImmediate.
|
| // TODO(20055): We should use DOM promises when available.
|
| return _scheduleImmediateWithTimer;
|
| }
|
| @@ -81,6 +80,16 @@ class _AsyncRun {
|
| convertDartClosureToJS(internalCallback, 0));
|
| }
|
|
|
| + static void _scheduleImmediateWithSetImmediate(void callback()) {
|
| + internalCallback() {
|
| + leaveJsAsync();
|
| + callback();
|
| + };
|
| + enterJsAsync();
|
| + JS('void', 'self.setImmediate(#)',
|
| + convertDartClosureToJS(internalCallback, 0));
|
| + }
|
| +
|
| static void _scheduleImmediateWithTimer(void callback()) {
|
| Timer._createTimer(Duration.ZERO, callback);
|
| }
|
|
|