mirror of
https://github.com/Ylianst/MeshAgent
synced 2025-12-14 15:23:39 +00:00
Fixed bug where promise.wait() would timeout if called after already settled
This commit is contained in:
@@ -2568,6 +2568,8 @@ duk_ret_t ILibDuktape_Polyfills_promise_wait_impl_res(duk_context *ctx)
|
|||||||
{
|
{
|
||||||
duk_push_current_function(ctx); // [func]
|
duk_push_current_function(ctx); // [func]
|
||||||
duk_get_prop_string(ctx, -1, "obj"); // [func][obj]
|
duk_get_prop_string(ctx, -1, "obj"); // [func][obj]
|
||||||
|
duk_push_true(ctx); duk_put_prop_string(ctx, -2, "settled");
|
||||||
|
|
||||||
duk_dup(ctx, 0); // [func][obj][resolvedValue]
|
duk_dup(ctx, 0); // [func][obj][resolvedValue]
|
||||||
duk_put_prop_string(ctx, -2, "return"); // [func][obj]
|
duk_put_prop_string(ctx, -2, "return"); // [func][obj]
|
||||||
ILibChain_EndContinue(duk_ctx_chain(ctx));
|
ILibChain_EndContinue(duk_ctx_chain(ctx));
|
||||||
@@ -2577,6 +2579,8 @@ duk_ret_t ILibDuktape_Polyfills_promise_wait_impl_rej(duk_context *ctx)
|
|||||||
{
|
{
|
||||||
duk_push_current_function(ctx); // [func]
|
duk_push_current_function(ctx); // [func]
|
||||||
duk_get_prop_string(ctx, -1, "obj"); // [func][obj]
|
duk_get_prop_string(ctx, -1, "obj"); // [func][obj]
|
||||||
|
duk_push_true(ctx); duk_put_prop_string(ctx, -2, "settled");
|
||||||
|
|
||||||
duk_dup(ctx, 0); // [func][obj][rejectedValue]
|
duk_dup(ctx, 0); // [func][obj][rejectedValue]
|
||||||
duk_put_prop_string(ctx, -2, "error"); // [func][obj]
|
duk_put_prop_string(ctx, -2, "error"); // [func][obj]
|
||||||
ILibChain_EndContinue(duk_ctx_chain(ctx));
|
ILibChain_EndContinue(duk_ctx_chain(ctx));
|
||||||
@@ -2587,7 +2591,7 @@ duk_ret_t ILibDuktape_Polyfills_promise_wait_impl(duk_context *ctx)
|
|||||||
ILibChain_Continue_Result continueResult;
|
ILibChain_Continue_Result continueResult;
|
||||||
int timeout = duk_is_number(ctx, 1) ? duk_require_int(ctx, 1) : -1;
|
int timeout = duk_is_number(ctx, 1) ? duk_require_int(ctx, 1) : -1;
|
||||||
int timerInfo = ILibChain_GetMinimumTimer(duk_ctx_chain(ctx));
|
int timerInfo = ILibChain_GetMinimumTimer(duk_ctx_chain(ctx));
|
||||||
int ret;
|
int ret = 1;
|
||||||
if (timeout < 0 && timerInfo > 0) { timeout = 60000; }
|
if (timeout < 0 && timerInfo > 0) { timeout = 60000; }
|
||||||
|
|
||||||
duk_push_object(ctx); // [obj]
|
duk_push_object(ctx); // [obj]
|
||||||
@@ -2598,6 +2602,8 @@ duk_ret_t ILibDuktape_Polyfills_promise_wait_impl(duk_context *ctx)
|
|||||||
duk_dup(ctx, -5); duk_put_prop_string(ctx, -2, "obj");
|
duk_dup(ctx, -5); duk_put_prop_string(ctx, -2, "obj");
|
||||||
duk_call_method(ctx, 2); // [obj][retpromise]
|
duk_call_method(ctx, 2); // [obj][retpromise]
|
||||||
|
|
||||||
|
if (!duk_has_prop_string(ctx, -2, "settled"))
|
||||||
|
{
|
||||||
ILibChain_Link **modules = ILibChain_GetModules(duk_ctx_chain(ctx));
|
ILibChain_Link **modules = ILibChain_GetModules(duk_ctx_chain(ctx));
|
||||||
int count = (int)(ILibMemory_Size(modules) / sizeof(ILibChain_Link*));
|
int count = (int)(ILibMemory_Size(modules) / sizeof(ILibChain_Link*));
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
@@ -2625,6 +2631,7 @@ duk_ret_t ILibDuktape_Polyfills_promise_wait_impl(duk_context *ctx)
|
|||||||
ret = 1;
|
ret = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (duk_has_prop_string(ctx, -2, "return"))
|
if (duk_has_prop_string(ctx, -2, "return"))
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user