fix: promise defers callback twice

This commit is contained in:
TopchetoEU 2024-03-08 17:23:50 +02:00
parent fbf103439a
commit 446ecd8f2b
Signed by: topchetoeu
GPG Key ID: 6531B8583E5F6ED4
2 changed files with 21 additions and 18 deletions

View File

@ -1,4 +1,4 @@
project_group = me.topchetoeu project_group = me.topchetoeu
project_name = jscript project_name = jscript
project_version = 0.9.9-beta project_version = 0.9.10-beta
main_class = me.topchetoeu.jscript.utils.JScriptRepl main_class = me.topchetoeu.jscript.utils.JScriptRepl

View File

@ -53,26 +53,29 @@ public class PromiseLib {
private Object val; private Object val;
private void resolveSynchronized(Context ctx, Object val, int newState) { private void resolveSynchronized(Context ctx, Object val, int newState) {
if (!ctx.hasNotNull(EventLoop.KEY)) throw EngineException.ofError("No event loop"); this.val = val;
this.state = newState;
ctx.get(EventLoop.KEY).pushMsg(() -> {
this.val = val; for (var handle : handles) {
this.state = newState; if (newState == STATE_FULFILLED) handle.onFulfil(val);
if (newState == STATE_REJECTED) {
for (var handle : handles) { handle.onReject((EngineException)val);
if (newState == STATE_FULFILLED) handle.onFulfil(val); handled = true;
if (newState == STATE_REJECTED) {
handle.onReject((EngineException)val);
handled = true;
}
} }
}
if (state == STATE_REJECTED && !handled) { if (state == STATE_REJECTED && !handled) {
Values.printError(((EngineException)val).setCtx(ctx), "(in promise)"); Values.printError(((EngineException)val).setCtx(ctx), "(in promise)");
} }
handles = null; handles = null;
}, true);
// ctx.get(EventLoop.KEY).pushMsg(() -> {
// if (!ctx.hasNotNull(EventLoop.KEY)) throw EngineException.ofError("No event loop");
// handles = null;
// }, true);
} }
private synchronized void resolve(Context ctx, Object val, int newState) { private synchronized void resolve(Context ctx, Object val, int newState) {