Comments (4)
then of io.reactiverse.es4x.Thenable Maybe should return new Future.
from es4x.
then of io.reactiverse.es4x.Thenable Maybe should return new Future.
I tried to modify it, but the problem was not simple.😣https://promisesaplus.com/#the-then-method
from es4x.
I try to implement this with native promises. I testing.
@Override
public Value then(Value onResolve, Value onReject) {
try {
return JavaScript.createPromise(context, (_resolve, _reject) -> {
Consumer<Object> onResolveNext = value -> {
if (value instanceof Value _value) {
if (JavaScript.isPromise(_value)) {
_value.invokeMember("then", _resolve, _reject);
} else {
_resolve.execute(value);
}
} else {
_resolve.execute(value);
}
};
Consumer<Object> onRejectNext = err -> {
if (err instanceof Value _value) {
if (JavaScript.isPromise(_value)) {
_value.invokeMember("then", _resolve, _reject);
} else {
_reject.execute(err);
}
} else {
_reject.execute(err);
}
};
future.onComplete(ar -> {
if (ar.succeeded()) {
T result = ar.result();
if (onResolve != null && onResolve.canExecute()) {
Value value = onResolve.execute(result);
onResolveNext.accept(value);
} else {
_resolve.execute(result);
}
} else {
Throwable cause = ar.cause();
if (onReject != null && onReject.canExecute()) {
Value value = onReject.execute(cause);
onRejectNext.accept(value);
} else {
_reject.execute(cause);
}
}
});
});
} catch (IOException e) {
throw new RuntimeException(e);
}
}
JavaScript.createPromise implement:
public static Value createPromise(Context context, PromiseExecutor executor) throws IOException {
Value bindings = context.getBindings("js");
bindings.putMember("executor", executor);
try {
Source source = Source
.newBuilder("js", "new Promise(executor)", null)
.build();
return context.eval(source);
} finally {
bindings.removeMember("executor");
}
}
from es4x.
@fantasy0v0 yes, that is the vert.x behavior, JavaScript has a similar behavior:
let myPromise = new Promise(function(myResolve, myReject) {
myResolve('OK'); // when successful
myResolve('OK'); // when successful
});
// "Consuming Code" (Must wait for a fulfilled Promise)
myPromise.then(
function(value) { console.log(value); },
function(error) { console.log(error); }
);
With a small difference that calling multiple times will silently ignore the multiple calls. Let's update es4x to be like that, ignore the multiple calls.
from es4x.
Related Issues (20)
- Type coercion problem in global setTimer HOT 1
- Include js verticles in Java code HOT 5
- Multiple verticle instances generate bad context exceptions from graalvm when loading modules from common npm packages HOT 1
- Require statements fail to resolve json files from dependency except by relative path
- Limitations of es4x? HOT 6
- Problem using await HOT 3
- invokeMember (then) on io.vertx.core.impl.future.PromiseImpl@47ddaaf5 failed due to: Arity error - expected: 2 actual: 1 HOT 1
- Cannot Resolve the CWD error when path contains spaces in windows HOT 1
- Native libraries HOT 3
- About the difference between JSVerticleFactory and MJSVerticleFactory
- Make a new release with the latest graal and vert.x HOT 1
- How to use handlebars in es4x? HOT 2
- require/load - Error loading JavaScript Module with ES4X in maven project HOT 3
- PR: Tracking progress for later alignment with web-modules. HOT 2
- [Question] How to build a file for java graaljs? HOT 1
- mongo-client:Multi threaded access requested by thread Thread[] but is not allowed for language(s) js HOT 2
- Release Vertx 4.4.0 npm modules HOT 3
- GraalVM 21 not recognized HOT 4
- About Native Images for ES4X
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 es4x.