@@ -24,7 +24,10 @@ func NewTransportWasmBridge(busRef bus.EventBus) *TransportWasmBridge {
24
24
}
25
25
26
26
func (t * TransportWasmBridge ) sendRequestMessageWrapper () js.Func {
27
- return js .FuncOf (func (this js.Value , args []js.Value ) interface {} {
27
+ jsFunc := js .FuncOf (func (this js.Value , args []js.Value ) interface {} {
28
+ // release the resources allocated for js.Func once this closure goes out of scope
29
+ defer jsFunc .Release ()
30
+
28
31
var destId * uuid.UUID
29
32
channel := args [0 ].String ()
30
33
payload := args [1 ].JSValue ()
@@ -40,10 +43,14 @@ func (t *TransportWasmBridge) sendRequestMessageWrapper() js.Func {
40
43
t .busRef .SendRequestMessage (channel , payload , destId )
41
44
return nil
42
45
})
46
+ return jsFunc
43
47
}
44
48
45
49
func (t * TransportWasmBridge ) sendResponseMessageWrapper () js.Func {
46
- return js .FuncOf (func (this js.Value , args []js.Value ) interface {} {
50
+ jsFunc := js .FuncOf (func (this js.Value , args []js.Value ) interface {} {
51
+ // release the resources allocated for js.Func once this closure goes out of scope
52
+ defer jsFunc .Release ()
53
+
47
54
var destId * uuid.UUID
48
55
channel := args [0 ].String ()
49
56
payload := args [1 ].JSValue ()
@@ -59,28 +66,41 @@ func (t *TransportWasmBridge) sendResponseMessageWrapper() js.Func {
59
66
t .busRef .SendResponseMessage (channel , payload , destId )
60
67
return nil
61
68
})
69
+ return jsFunc
62
70
}
63
71
64
72
func (t * TransportWasmBridge ) listenStreamWrapper () js.Func {
65
- return js .FuncOf (func (this js.Value , args []js.Value ) interface {} {
73
+ jsFunc := js .FuncOf (func (this js.Value , args []js.Value ) interface {} {
66
74
handler , err := t .busRef .ListenStream (args [0 ].String ())
67
75
if err != nil {
68
76
errCtor := js .Global ().Get ("Error" )
69
77
return errCtor .New (err .Error ())
70
78
}
71
79
80
+ closerFuncRef := js .FuncOf (func (this js.Value , args []js.Value ) interface {} {
81
+ handler .Close ()
82
+
83
+ // release the resources allocated for js.Func when closing the subscription
84
+ for _ , ref := range jsFuncRefs {
85
+ ref .Release ()
86
+ }
87
+
88
+ return nil
89
+ })
90
+
91
+ // store js.Func handles for resource cleanup later
92
+ jsFuncRefs := []js.Func {jsFunc , getResponseHandlerJsCallbackFunc (handler ), closerFuncRef }
93
+
72
94
return map [string ]interface {}{
73
- "handle" : getResponseHandlerJsCallbackFunc (handler ),
74
- "close" : js .FuncOf (func (this js.Value , args []js.Value ) interface {} {
75
- handler .Close ()
76
- return nil
77
- }),
95
+ "handle" : jsFuncRefs [1 ],
96
+ "close" : jsFuncRefs [2 ],
78
97
}
79
98
})
99
+ return jsFunc
80
100
}
81
101
82
102
func (t * TransportWasmBridge ) listenStreamWithIdWrapper () js.Func {
83
- return js .FuncOf (func (this js.Value , args []js.Value ) interface {} {
103
+ jsFunc := js .FuncOf (func (this js.Value , args []js.Value ) interface {} {
84
104
if len (args ) <= 1 {
85
105
errCtor := js .Global ().Get ("Error" )
86
106
js .Global ().Get ("console" ).Call ("error" , errCtor .New ("cannot listen to channel. missing destination ID" ))
@@ -99,12 +119,23 @@ func (t *TransportWasmBridge) listenStreamWithIdWrapper() js.Func {
99
119
return errCtor .New (err .Error ())
100
120
}
101
121
122
+ closerFuncRef := js .FuncOf (func (this js.Value , args []js.Value ) interface {} {
123
+ handler .Close ()
124
+
125
+ // release the resources allocated for js.Func when closing the subscription
126
+ for _ , ref := range jsFuncRefs {
127
+ ref .Release ()
128
+ }
129
+
130
+ return nil
131
+ })
132
+
133
+ // store js.Func handles for resource cleanup later
134
+ jsFuncRefs := []js.Func {jsFunc , getResponseHandlerJsCallbackFunc (handler ), closerFuncRef }
135
+
102
136
return map [string ]interface {}{
103
- "handle" : getResponseHandlerJsCallbackFunc (handler ),
104
- "close" : js .FuncOf (func (this js.Value , args []js.Value ) interface {} {
105
- handler .Close ()
106
- return nil
107
- }),
137
+ "handle" : jsFuncRefs [1 ],
138
+ "close" : jsFuncRefs [2 ],
108
139
}
109
140
})
110
141
}
0 commit comments