<html>
    <head>
      <base href="https://bugs.webkit.org/" />
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - [ES6] Typical Promise chain easily exhaust memory"
   href="https://bugs.webkit.org/show_bug.cgi?id=150295">150295</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>[ES6] Typical Promise chain easily exhaust memory
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>WebKit
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>WebKit Nightly Build
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>Unspecified
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Unspecified
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>Normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P2
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>JavaScriptCore
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>webkit-unassigned&#64;lists.webkit.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>utatane.tea&#64;gmail.com
          </td>
        </tr></table>
      <p>
        <div>
        <pre>This is originally reported in Chromium/Blink context[1].

In the following example,
```js

&quot;use strict&quot;;
var p = null;
(function () {
    var N = 1000 * 1000;
    var counter = 0;
    var resolve;

    function read() {
        return Promise.resolve({done: ++counter &gt;= N});
    }

    function pump() {
        return read().then(function(r) {
            if (counter % 10000 == 0)
                gc();
            if (r.done) {
                return;
            }
            return pump();
        });
    }

    p = pump();
}());
```

Since it chains promises like `a =&gt; b =&gt; c =&gt; ... too much promises =&gt; final`, if there are too much promises, it exhausts memory.

This behavior is well-specified correct behavior, but in practice, we would like to collect / reduce these promises.

[1]: <a href="https://github.com/domenic/streams-demo/issues/4">https://github.com/domenic/streams-demo/issues/4</a></pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>