From 09884a60818dd2e24166662f9723f9f6ec1beaf5 Mon Sep 17 00:00:00 2001 From: Leslie Leigh Date: Sun, 21 Sep 2025 20:14:23 +0800 Subject: [PATCH] fix crash if JS land raised an unhandled promise rejection --- native/cocos/bindings/jswrapper/v8/ScriptEngine.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/native/cocos/bindings/jswrapper/v8/ScriptEngine.cpp b/native/cocos/bindings/jswrapper/v8/ScriptEngine.cpp index b7ccaa0e1ee..b755a9cbdee 100644 --- a/native/cocos/bindings/jswrapper/v8/ScriptEngine.cpp +++ b/native/cocos/bindings/jswrapper/v8/ScriptEngine.cpp @@ -1184,11 +1184,12 @@ void ScriptEngine::removeUnhandledPromise(v8::Local promise) { // Remove handled promises from the list SE_ASSERT(promise->GetIsolate() == _isolate, "Wrong isolate"); auto *isolate = promise->GetIsolate(); - for (auto it = _unhandledPromises.begin(); it != _unhandledPromises.end(); ++it) { - v8::Local const unhandledPromise = std::get<0>(*it).Get(isolate); - if (unhandledPromise == promise) { - _unhandledPromises.erase(it--); - } + auto const it = std::find_if(_unhandledPromises.begin(), _unhandledPromises.end(), [&](auto const &p) { + v8::Local const unhandledPromise = std::get<0>(p).Get(isolate); + return unhandledPromise == promise; + }); + if (it != _unhandledPromises.end()) { + _unhandledPromises.erase(it); } }