Giter Club home page Giter Club logo

Comments (8)

igorw avatar igorw commented on May 18, 2024

We might be able to put a trampoline inside then or resolve to keep the stack size constant.

from promise.

jsor avatar jsor commented on May 18, 2024

👍
Haven't done anything in this direction. Unfortunately, i'm swamped with work at the moment. So, if anyone wants to take a stab at it....

from promise.

mtdowling avatar mtdowling commented on May 18, 2024

Here's a trimmed down stack trace that shows where the recursion is happening:

PHP Stack trace:
PHP   1. {main}() test.php:0
PHP   2. React\Promise\Deferred->resolve() test.php:18
PHP   3. call_user_func() /react/promise/src/Deferred.php:35
PHP   4. React\Promise\Promise->React\Promise\{closure}() /react/promise/src/Deferred.php:35
PHP   5. React\Promise\Promise->resolve() /react/promise/src/Promise.php:122
PHP   6. React\Promise\Promise->settle() /react/promise/src/Promise.php:83
PHP   7. React\Promise\Promise->React\Promise\{closure}() /react/promise/src/Promise.php:109
PHP   8. React\Promise\FulfilledPromise->then() /react/promise/src/Promise.php:70
PHP   9. React\Promise\Promise->React\Promise\{closure}() /react/promise/src/FulfilledPromise.php:24
PHP  10. React\Promise\Promise->resolve() /react/promise/src/Promise.php:122
PHP  11. React\Promise\Promise->settle() /react/promise/src/Promise.php:83
PHP  12. React\Promise\Promise->React\Promise\{closure}() /react/promise/src/Promise.php:109
PHP  13. React\Promise\FulfilledPromise->then() /react/promise/src/Promise.php:70
PHP  14. React\Promise\Promise->React\Promise\{closure}() /react/promise/src/FulfilledPromise.php:24
PHP  15. React\Promise\Promise->resolve() /react/promise/src/Promise.php:122
PHP  16. React\Promise\Promise->settle() /react/promise/src/Promise.php:83
PHP  17. React\Promise\Promise->React\Promise\{closure}() /react/promise/src/Promise.php:109
PHP  18. React\Promise\FulfilledPromise->then() /react/promise/src/Promise.php:70
PHP  19. React\Promise\Promise->React\Promise\{closure}() /react/promise/src/FulfilledPromise.php:24
PHP  20. React\Promise\Promise->resolve() /react/promise/src/Promise.php:122
PHP  21. React\Promise\Promise->settle() /react/promise/src/Promise.php:83
PHP  22. React\Promise\Promise->React\Promise\{closure}() /react/promise/src/Promise.php:109
PHP  23. React\Promise\FulfilledPromise->then() /react/promise/src/Promise.php:70
PHP  24. React\Promise\Promise->React\Promise\{closure}() /react/promise/src/FulfilledPromise.php:24

from promise.

mtdowling avatar mtdowling commented on May 18, 2024

I think @igorw is right: using a trampoline with promise resolution should be possible. It looks like bluebird uses trampolines, and here's a proof of concept promises implementation that uses trampolines: https://gist.github.com/Twisol/4526419.

from promise.

jsor avatar jsor commented on May 18, 2024

I played a little bit: https://github.com/reactphp/promise/compare/queue
At least it can now run your example code :)

from promise.

jsor avatar jsor commented on May 18, 2024

Since the queue implementation only reduces recursion per each promise chain, i also played with a global queue: https://github.com/reactphp/promise/compare/global-queue. It's a little bit more difficult because done() could throw exceptions which could break the queue.

I also realized, that introducing a queue opens the possibility to implement future-turn resolutions (#4).

from promise.

mtdowling avatar mtdowling commented on May 18, 2024

Interesting. How would you envision the global queue technique working with something like React? Would it just drain the task queue on each tick?

from promise.

jsor avatar jsor commented on May 18, 2024

Exactly, $this->drain() would become nextTick(function() { $this->drain() }).

from promise.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.