Jelajahi Sumber

fix: reject promise on child error

So that the we won't await infinitely.

Fixes #10107
Allan Chain 2 tahun lalu
induk
melakukan
bba8aa5729
1 mengubah file dengan 17 tambahan dan 2 penghapusan
  1. 17 2
      libs/src/postmate/index.ts

+ 17 - 2
libs/src/postmate/index.ts

@@ -137,13 +137,17 @@ export class ParentAPI {
   }
 
   get(property, ...args) {
-    return new Promise((resolve) => {
+    return new Promise((resolve, reject) => {
       // Extract data from response and kill listeners
       const uid = generateNewMessageId()
       const transact = (e) => {
         if (e.data.uid === uid && e.data.postmate === 'reply') {
           this.parent.removeEventListener('message', transact, false)
-          resolve(e.data.value)
+          if (e.data.error) {
+            reject(e.data.error)
+          } else {
+            resolve(e.data.value)
+          }
         }
       }
 
@@ -245,6 +249,17 @@ export class ChildAPI {
           },
           e.origin
         )
+      }).catch((error) => {
+        ;(e.source as WindowProxy).postMessage(
+          {
+            property,
+            postmate: 'reply',
+            type: messageType,
+            uid,
+            error,
+          },
+          e.origin
+        )
       })
     })
   }