fix: reject promise on child error

So that the we won't await infinitely.

Fixes #10107
pull/10121/head
Allan Chain 2023-08-28 17:50:09 +08:00 committed by Tienson Qin
parent 474360ff1e
commit bba8aa5729
1 changed files with 17 additions and 2 deletions

View File

@ -137,15 +137,19 @@ 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)
if (e.data.error) {
reject(e.data.error)
} else {
resolve(e.data.value)
}
}
}
// Prepare for response from Child...
this.parent.addEventListener('message', transact, false)
@ -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
)
})
})
}