diff --git a/ecmascript/builtins/builtins_promise.cpp b/ecmascript/builtins/builtins_promise.cpp index 2959fa3a2df4c042a2239a5a8fc3b792c8251790..8f0388eee4d3e0d11982c1923f92c1d9f2a30b86 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; + } } }