Comments (9)
Promise resolution is synchronous by default, except when you resolve them asynchronously.
$loop->futureTick(function () use ($d) {
$d->resolve('resolve');
});
from promise.
I think that then method must be asynchronous.
I think it fix all problem here.
I found another implementation of promise in popular framework mojolicious (sorry this is perl but code implementation is very simple). The method then is called there asynchronously. Link to code.
What do you think about it?
from promise.
Could you explain why resolution should be asynchronous and what exact problem would be solved?
from promise.
I write tests where i use run and stop method of event loop many times.
Simplified code of my tests looks like it is written in the first post.
Then method should be non-blocking because of expected behavior.
from promise.
Bear in mind that a promise is nothing more then a communication channel. It only does things when you it to. So while it's own execution is synchronous it enables us to write non-blocking code. The then
does nothing more then set the callbacks to run when the promise resolves, and run it when the promise already resolved. Consider the following:
$deferred = new Deferred();
We get a promise from the deferred object and set a resolve handler on it:
$deferred->promise()->then(function () {
echo 'resolved!', PHP_EOL;
});
Now up to this point nothing is echoed. But once we call $deferred->resolve();
resolved!
will be echoed. So when you call it like this resolved!
will be echoed the moment you call then:
$deferred = new Deferred();
$deferred->resolve();
$deferred->promise()->then(function () {
echo 'resolved!', PHP_EOL;
});
And that is exactly what your example does, it resolves the promise the moment you create it. Which is the expected behaviour.
Also the reason why you have an infinite loop with that example is because you have an open connection with Google and it takes a while for the timeout to kick in and the connection to close.
from promise.
Also the reason why you have an infinite loop with that example is because you have an open connection with Google and it takes a while for the timeout to kick in and the connection to close.
I repeat, I am writing tests. The connection is established in the setup method, and the connection is closed in the teardown method. This is logical for me. The effect is the same.
And that is exactly what your example does, it resolves the promise the moment you create it. Which is the expected behaviour.
It looks like for different people the expected behavior is different. For this reason, I am going to close the topic.
I have a question, how to use assert in event loop or what if exception appears in event loop in tests? At this point, there is an infinite loop again.
from promise.
@Logioniz these tests? https://github.com/Logioniz/reactphp-memcached/blob/master/tests/FunctionalTest.php#L242
from promise.
Yes.
from promise.
Cheers, slowly working on a PR with some suggestions 😄
from promise.
Related Issues (20)
- 2.x returned promise types HOT 3
- return promise from onFullfilled HOT 8
- Is there is any way in Reactphp to run code really asynchronously HOT 1
- [RFC] Consider deprecating FulfilledPromise and RejectedPromise (mark as internal only) HOT 6
- Detecting thenable causes unwanted side effects
- ETA version 3? HOT 4
- Call promise twice HOT 2
- When serializing & later unserializing exceptions thrown by clashing function calls HOT 13
- PHP 8.0 Deprecation Notice HOT 1
- Blocking a promise from running untill another promise has completed. HOT 11
- Problem with PHP 8 HOT 3
- allSettled operator HOT 2
- QUESTION - How to test if a code is blocking or not HOT 2
- php 7.1 multiple exceptions using the pipe (|) character HOT 1
- Allow `iterable` instead of `array` for `all()`, `race()` and `any()` HOT 1
- Add example folder HOT 2
- Support Disjunctive Normal Form Types (DNF types) for PHP 8.2+
- Exception: Value of type null is not callable HOT 5
- Arguments expecting callables should describe the full signature of callables HOT 8
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from promise.