Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Uncaught (in promise) RangeError: Maximum call stack size exceeded #127

Closed
seu070507 opened this issue May 24, 2022 · 3 comments
Closed

Comments

@seu070507
Copy link

Hi, I got the "Maximum call stack size exceeded " message below as below:
the root case is this code in Movie.prototype._render function:

               ...........

var end = this.duration;
var ended = this.currentTime > end;
if (ended) {
this._lastPlayed = performance.now();
this._lastPlayedOffset = 0; // this.currentTime
this._renderingFrame = false;
if (!this.repeat || this.recording) {
this._paused = true;
this._ended = true;
// Deactivate all layers
for (var i = 0; i < this.layers.length; i++)
if (Object.prototype.hasOwnProperty.call(this.layers, i)) {
var layer = this.layers[i];
// A layer that has been deleted before layers.length has been updated
// (see the layers proxy in the constructor).
if (!layer)
continue;
layer.stop();
layer.active = false; // this case the infinite loop!!!!!!
}
}
publish(this, 'movie.ended', { movie: this, repeat: this.repeat });
// TODO: only reset currentTime if repeating
this._currentTime = 0; // don't use setter
publish(this, 'movie.timeupdate', { movie: this });
}

       .............

Is the right way to modified the active property to _active, so it can avoid the proxy set function which case the infinite loop?

the whole stacks are below:
etro-iife.js:2763 Uncaught (in promise) RangeError: Maximum call stack size exceeded
at etro-iife.js:2763:39
at new Promise ()
at Proxy.Movie.refresh (etro-iife.js:2762:20)
at etro-iife.js:2465:29
at publish (etro-iife.js:122:13)
at etro-iife.js:732:17
at publish (etro-iife.js:122:13)
at callback (etro-iife.js:497:13)
at Object.set (etro-iife.js:526:21)
at Proxy.Movie._render (etro-iife.js:2642:42)
(anonymous) @ etro-iife.js:2763
Movie.refresh @ etro-iife.js:2762
(anonymous) @ etro-iife.js:2465
publish @ etro-iife.js:122
(anonymous) @ etro-iife.js:732
publish @ etro-iife.js:122
callback @ etro-iife.js:497
set @ etro-iife.js:526
Movie._render @ etro-iife.js:2642
(anonymous) @ etro-iife.js:2764
Movie.refresh @ etro-iife.js:2762
(anonymous) @ etro-iife.js:2465
publish @ etro-iife.js:122
(anonymous) @ etro-iife.js:732
publish @ etro-iife.js:122
callback @ etro-iife.js:497
set @ etro-iife.js:526
Movie._render @ etro-iife.js:2642
(anonymous) @ etro-iife.js:2764
Movie.refresh @ etro-iife.js:2762
(anonymous) @ etro-iife.js:2465
publish @ etro-iife.js:122
(anonymous) @ etro-iife.js:732
publish @ etro-iife.js:122
callback @ etro-iife.js:497
set @ etro-iife.js:526
Movie._render @ etro-iife.js:2642
(anonymous) @ etro-iife.js:2764
Movie.refresh @ etro-iife.js:2762
(anonymous) @ etro-iife.js:2465
publish @ etro-iife.js:122
(anonymous) @ etro-iife.js:732
publish @ etro-iife.js:122
callback @ etro-iife.js:497
set @ etro-iife.js:526
Movie._render @ etro-iife.js:2642
(anonymous) @ etro-iife.js:2764
Movie.refresh @ etro-iife.js:2762
(anonymous) @ etro-iife.js:2465
publish @ etro-iife.js:122
(anonymous) @ etro-iife.js:732
publish @ etro-iife.js:122
callback @ etro-iife.js:497
set @ etro-iife.js:526
Movie._render @ etro-iife.js:2642
(anonymous) @ etro-iife.js:2764
Movie.refresh @ etro-iife.js:2762
(anonymous) @ etro-iife.js:2465
publish @ etro-iife.js:122
(anonymous) @ etro-iife.js:732
publish @ etro-iife.js:122
callback @ etro-iife.js:497
set @ etro-iife.js:526
Movie._render @ etro-iife.js:2642
(anonymous) @ etro-iife.js:2764
Movie.refresh @ etro-iife.js:2762
(anonymous) @ etro-iife.js:2465
publish @ etro-iife.js:122
(anonymous) @ etro-iife.js:732
publish @ etro-iife.js:122
callback @ etro-iife.js:497
set @ etro-iife.js:526
Movie._render @ etro-iife.js:2642
(anonymous) @ etro-iife.js:2764
Movie.refresh @ etro-iife.js:2762
(anonymous) @ etro-iife.js:2465
publish @ etro-iife.js:122
(anonymous) @ etro-iife.js:732
publish @ etro-iife.js:122
callback @ etro-iife.js:497
set @ etro-iife.js:526
Movie._render @ etro-iife.js:2642
(anonymous) @ etro-iife.js:2764
Movie.refresh @ etro-iife.js:2762
(anonymous) @ etro-iife.js:2465
publish @ etro-iife.js:122
(anonymous) @ etro-iife.js:732
publish @ etro-iife.js:122
callback @ etro-iife.js:497
set @ etro-iife.js:526
Movie._render @ etro-iife.js:2642
(anonymous) @ etro-iife.js:2764
Movie.refresh @ etro-iife.js:2762
(anonymous) @ etro-iife.js:2465
publish @ etro-iife.js:122
(anonymous) @ etro-iife.js:732
publish @ etro-iife.js:122
callback @ etro-iife.js:497
set @ etro-iife.js:526
Movie._render @ etro-iife.js:2642
(anonymous) @ etro-iife.js:2764
Movie.refresh @ etro-iife.js:2762
(anonymous) @ etro-iife.js:2465
publish @ etro-iife.js:122
(anonymous) @ etro-iife.js:732
publish @ etro-iife.js:122
callback @ etro-iife.js:497
set @ etro-iife.js:526
Movie._render @ etro-iife.js:2642
(anonymous) @ etro-iife.js:2764
Movie.refresh @ etro-iife.js:2762
(anonymous) @ etro-iife.js:2465
publish @ etro-iife.js:122
(anonymous) @ etro-iife.js:732
publish @ etro-iife.js:122
callback @ etro-iife.js:497
set @ etro-iife.js:526
Movie._render @ etro-iife.js:2642
(anonymous) @ etro-iife.js:2764
Movie.refresh @ etro-iife.js:2762
(anonymous) @ etro-iife.js:2465
publish @ etro-iife.js:122
(anonymous) @ etro-iife.js:732
publish @ etro-iife.js:122
callback @ etro-iife.js:497
set @ etro-iife.js:526
Movie._render @ etro-iife.js:2642
(anonymous) @ etro-iife.js:2764
Movie.refresh @ etro-iife.js:2762
(anonymous) @ etro-iife.js:2465
publish @ etro-iife.js:122
(anonymous) @ etro-iife.js:732
publish @ etro-iife.js:122
callback @ etro-iife.js:497
set @ etro-iife.js:526
Movie._render @ etro-iife.js:2642
(anonymous) @ etro-iife.js:2764
Movie.refresh @ etro-iife.js:2762
(anonymous) @ etro-iife.js:2465
publish @ etro-iife.js:122
(anonymous) @ etro-iife.js:732
publish @ etro-iife.js:122
callback @ etro-iife.js:497
set @ etro-iife.js:526
Movie._render @ etro-iife.js:2642
(anonymous) @ etro-iife.js:2764
Movie.refresh @ etro-iife.js:2762
(anonymous) @ etro-iife.js:2465
publish @ etro-iife.js:122
(anonymous) @ etro-iife.js:732
publish @ etro-iife.js:122
callback @ etro-iife.js:497
set @ etro-iife.js:526
Movie._render @ etro-iife.js:2642
(anonymous) @ etro-iife.js:2764
Movie.refresh @ etro-iife.js:2762
(anonymous) @ etro-iife.js:2465
publish @ etro-iife.js:122
(anonymous) @ etro-iife.js:732
publish @ etro-iife.js:122
callback @ etro-iife.js:497
set @ etro-iife.js:526
Movie._render @ etro-iife.js:2642
(anonymous) @ etro-iife.js:2764
Movie.refresh @ etro-iife.js:2762
(anonymous) @ etro-iife.js:2465
publish @ etro-iife.js:122
(anonymous) @ etro-iife.js:732
publish @ etro-iife.js:122
callback @ etro-iife.js:497
set @ etro-iife.js:526
Movie._render @ etro-iife.js:2642
(anonymous) @ etro-iife.js:2764
Movie.refresh @ etro-iife.js:2762
(anonymous) @ etro-iife.js:2465
publish @ etro-iife.js:122
(anonymous) @ etro-iife.js:732
publish @ etro-iife.js:122
callback @ etro-iife.js:497
set @ etro-iife.js:526
Movie._render @ etro-iife.js:2642
(anonymous) @ etro-iife.js:2764
Movie.refresh @ etro-iife.js:2762
(anonymous) @ etro-iife.js:2465
publish @ etro-iife.js:122
(anonymous) @ etro-iife.js:732
publish @ etro-iife.js:122
callback @ etro-iife.js:497
set @ etro-iife.js:526
Movie._render @ etro-iife.js:2642
Show 150 more frames

@seu070507
Copy link
Author

Another way is add active to Base.prototype.publicExcludes.

But I don't know what's the best way to choose

@clabe45
Copy link
Collaborator

clabe45 commented Jul 17, 2022

I think we should remove the whole proxy / auto-refresh system (#130). It's causing more harm than good. We could add active to publicExcludes in the meantime. I'll open an issue for it.

@clabe45
Copy link
Collaborator

clabe45 commented Jul 17, 2022

See #124

@clabe45 clabe45 closed this as completed Jul 17, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants