@@ -21,6 +21,7 @@ class ExecutionServiceImpl implements ExecutionService {
21
21
22
22
web.HTMLIFrameElement _frame;
23
23
late String _frameSrc;
24
+ Completer <void >? _activeExecuteCompleter;
24
25
Completer <void > _readyCompleter = Completer ();
25
26
26
27
ExecutionServiceImpl (this ._frame) {
@@ -37,21 +38,35 @@ class ExecutionServiceImpl implements ExecutionService {
37
38
required bool isNewDDC,
38
39
required bool isFlutter,
39
40
}) async {
40
- if (! reload) {
41
- await _reset ();
41
+ if (_activeExecuteCompleter != null ) {
42
+ await _activeExecuteCompleter! .future.timeout (
43
+ Duration (seconds: 5 ),
44
+ onTimeout: () {
45
+ _activeExecuteCompleter? .complete ();
46
+ },
47
+ );
42
48
}
49
+ _activeExecuteCompleter = Completer ();
50
+ try {
51
+ if (! reload) {
52
+ await _reset ();
53
+ }
43
54
44
- return _send (reload ? 'executeReload' : 'execute' , {
45
- 'js' : _decorateJavaScript (
46
- javaScript,
47
- modulesBaseUrl: modulesBaseUrl,
48
- isNewDDC: isNewDDC,
49
- reload: reload,
50
- isFlutter: isFlutter,
51
- ),
52
- if (engineVersion != null )
53
- 'canvasKitBaseUrl' : _canvasKitUrl (engineVersion),
54
- });
55
+ await _send (reload ? 'executeReload' : 'execute' , {
56
+ 'js' : _decorateJavaScript (
57
+ javaScript,
58
+ modulesBaseUrl: modulesBaseUrl,
59
+ isNewDDC: isNewDDC,
60
+ reload: reload,
61
+ isFlutter: isFlutter,
62
+ ),
63
+ if (engineVersion != null )
64
+ 'canvasKitBaseUrl' : _canvasKitUrl (engineVersion),
65
+ });
66
+ } finally {
67
+ _activeExecuteCompleter? .complete ();
68
+ _activeExecuteCompleter = null ;
69
+ }
55
70
}
56
71
57
72
@override
0 commit comments