diff --git a/ios/App/App/Helpers/JS.swift b/ios/App/App/Helpers/JS.swift index ac92bd72..2f5fdd7c 100644 --- a/ios/App/App/Helpers/JS.swift +++ b/ios/App/App/Helpers/JS.swift @@ -24,7 +24,7 @@ protocol JSONConvertible { class JSAsyncResult: NSObject, Identifiable, WKScriptMessageHandler { private typealias Listener = (Result) -> () - + private static let defaultName: String = "jsAsyncResult" private static let fieldID: String = "id" @@ -49,34 +49,35 @@ class JSAsyncResult: NSObject, Identifiable, WKScriptMessageHandler { await selfWeak?.resultManager.setResult(result, forID: id) } } - + return id } func awaitResultWithID(_ id: String) async throws -> Any { - if let result = await resultManager.result[id] { - return try result.get() - } - return try await withCheckedThrowingContinuation { continuation in Task { - await listenerRegistry.add(forID: id) { result in + if let result = await resultManager.result[id] { continuation.resume(with: result) + } else { + await listenerRegistry.add(forID: id) { result in + continuation.resume(with: result) + } } } } } + func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { guard message.name == id, let body = message.body as? [String: Any] else { return } - + Task { guard let id = body[Self.fieldID] as? String else { return } do { let result = body[Self.fieldResult] let error = body[Self.fieldError] - + if let result = result, error == nil { await listenerRegistry.notifyAllWithID(id, with: .success(result)) } else if let error = error {