From 5c4220b15b3e2779f1e3d5f6bea290ee5ee438aa Mon Sep 17 00:00:00 2001 From: mingyix <13926077+mingyix@user.noreply.gitee.com> Date: Fri, 29 Mar 2024 10:12:31 +0800 Subject: [PATCH] [fixbug][promise-perfrom-race-resolve-lookup.js]Promise.race returns when one of the promises is completed --- ecmascript/builtins/builtins_promise.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ecmascript/builtins/builtins_promise.cpp b/ecmascript/builtins/builtins_promise.cpp index 2959fa3a2..8f0388eee 100644 --- a/ecmascript/builtins/builtins_promise.cpp +++ b/ecmascript/builtins/builtins_promise.cpp @@ -636,6 +636,15 @@ JSHandle BuiltinsPromise::PerformPromiseRace(JSThread *thread, handleResult = JSPromise::IfThrowGetThrowValue(thread); } RETURN_COMPLETION_IF_ABRUPT(thread, handleResult); + + if (JSHandle::Cast(nextPromise)->GetPromiseState() != ecmascript::PromiseState::PENDING || + JSHandle::Cast(nextValue)->GetPromiseState() != ecmascript::PromiseState::PENDING) { + iteratorRecord->SetDone(true); + JSHandle promise(thread, capability->GetPromise()); + JSHandle completionRecord = + factory->NewCompletionRecord(CompletionRecordType::NORMAL, promise); + return completionRecord; + } } } -- Gitee