| Summary: | Promises created from async functions don't resolve when document is detached. | ||
|---|---|---|---|
| Product: | WebKit | Reporter: | John-David Dalton <john.david.dalton> |
| Component: | JavaScriptCore | Assignee: | Nobody <webkit-unassigned> |
| Status: | NEW --- | ||
| Severity: | Normal | CC: | ashvayka, cyb.ai.815, emilio, fpizlo, keith_miller, webkit-bug-importer, ysuzuki |
| Priority: | P2 | Keywords: | InRadar |
| Version: | Safari Technology Preview | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
This might be a Chrome bug per spec, see: https://bugzilla.mozilla.org/show_bug.cgi?id=1663090#c3 (Though I haven't double-checked) Currently, what we should do is not fully clarified in the spec. It is ongoing discussion. But I think forever-pending promise would make sense since we should stop execution of script, and rejecting promise can involve script execution. https://github.com/whatwg/html/issues/2621 |
The following snippet works in Chrome: (async () => { var i = document.createElement('iframe'); document.body.appendChild(i); var a = i.contentWindow.eval('(async () => await 1)'); i.remove(); // someone removes the iframe const v = await a(); console.log(v); })(); Our use case has code that works when wired up and then someone removes the iframe and `await` no longer resolves.