Closed Bug 1552648 Opened 5 years ago Closed 3 years ago

Can't inspect deeply nested promise

Categories

(DevTools :: Console, defect, P3)

defect

Tracking

(firefox85 fixed)

RESOLVED FIXED
85 Branch
Tracking Status
firefox85 --- fixed

People

(Reporter: Oriol, Assigned: Oriol)

References

Details

Attachments

(1 file)

Run this code in the console:

var p = {};
for (let i=0; i < 15000; ++i) {
  p = Object.setPrototypeOf(Promise.resolve(p), null);
}
p;

Result: an empty error message.

If instead of p; you use [p]; at the end, and then expand the array, the browser console says:

Error while calling actor 'propertyIterator's method 'slice' too much recursion
objectGrip@resource://devtools/server/actors/webconsole.js:433:1
createValueGrip@resource://devtools/server/actors/object/utils.js:122:14
createValueGrip@resource://devtools/server/actors/webconsole.js:389:12
createValueGrip@resource://devtools/server/actors/webconsole.js:438:34
_createPromiseState@resource://devtools/server/actors/object.js:190:39
form@resource://devtools/server/actors/object.js:131:29
objectGrip@resource://devtools/server/actors/webconsole.js:445:18
createValueGrip@resource://devtools/server/actors/object/utils.js:122:14
createValueGrip@resource://devtools/server/actors/webconsole.js:389:12
createValueGrip@resource://devtools/server/actors/webconsole.js:438:34
_createPromiseState@resource://devtools/server/actors/object.js:190:39
form@resource://devtools/server/actors/object.js:131:29
...

https://searchfox.org/mozilla-central/rev/0078b9e7d42c366b102d7aec918caf64fed1d574/devtools/server/actors/object.js#131

This is the same as bug 1392760 but for promises instead of proxies. Though this one is not that bad, because the behavior is not exponential, and promises can't be nested by default (that's why the code uses the Object.setPrototypeOf trick)

Priority: -- → P3

Alternative code, cyclic promises:

var resolve;
var promise1 = new Promise(r => {resolve = r});
Object.setPrototypeOf(promise1, null);
var promise2 = Promise.resolve(promise1);
Object.setPrototypeOf(promise2, null);
resolve(promise2);
promise1;
Assignee: nobody → oriol-bugzilla
Status: NEW → ASSIGNED
Blocks: 1676476
Pushed by nerli@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/0affc83cf6d5
Avoid too much recursion when inspecting nested promises. r=nchevobbe,devtools-backward-compat-reviewers
Status: ASSIGNED → RESOLVED
Closed: 3 years ago
Resolution: --- → FIXED
Target Milestone: --- → 85 Branch
Regressions: 1737482
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: