diff --git a/native/cpp/CommonCpp/NativeModules/InternalModules/RustPromiseManager.cpp b/native/cpp/CommonCpp/NativeModules/InternalModules/RustPromiseManager.cpp --- a/native/cpp/CommonCpp/NativeModules/InternalModules/RustPromiseManager.cpp +++ b/native/cpp/CommonCpp/NativeModules/InternalModules/RustPromiseManager.cpp @@ -34,12 +34,19 @@ // Release the shared lock lock.unlock(); auto promiseInfo = it->second; - if (promiseInfo.jsInvoker) { - promiseInfo.jsInvoker->invokeAsync([promiseInfo, ret]() { + + auto resolveLogic = [&]() { + if (ret == nullptr) { + promiseInfo.promise->resolve(facebook::jsi::Value::undefined()); + } else { promiseInfo.promise->resolve(valueFromDynamic(promiseInfo.rt, ret)); - }); + } + }; + + if (promiseInfo.jsInvoker) { + promiseInfo.jsInvoker->invokeAsync(resolveLogic); } else { - promiseInfo.promise->resolve(valueFromDynamic(promiseInfo.rt, ret)); + resolveLogic(); } removePromise(id); } diff --git a/native/native_rust_library/RustCallback.h b/native/native_rust_library/RustCallback.h --- a/native/native_rust_library/RustCallback.h +++ b/native/native_rust_library/RustCallback.h @@ -5,5 +5,6 @@ namespace comm { void stringCallback(rust::String error, uint32_t promiseID, rust::String ret); +void voidCallback(rust::String error, uint32_t promiseID); } // namespace comm diff --git a/native/native_rust_library/RustCallback.cpp b/native/native_rust_library/RustCallback.cpp --- a/native/native_rust_library/RustCallback.cpp +++ b/native/native_rust_library/RustCallback.cpp @@ -23,4 +23,18 @@ } } +void voidCallback(rust::String error, uint32_t promiseID) { + auto it = RustPromiseManager::instance.promises.find(promiseID); + if (it == RustPromiseManager::instance.promises.end()) { + return; + } + + if (error.size()) { + RustPromiseManager::instance.rejectPromise(promiseID, std::string(error)); + } else { + RustPromiseManager::instance.resolvePromise( + promiseID, folly::dynamic(nullptr)); + } +} + } // namespace comm