@@ -39,18 +39,13 @@ type ResultIterator struct {
39
39
}
40
40
41
41
// NewResultIterator creates a new iterator and starts handling message on the result channel
42
- func NewResultIterator (ctx context.Context , ch chan * Result ) * ResultIterator {
43
- if ctx == nil {
44
- ctx = context .Background ()
45
- }
46
-
47
- cctx , cancelFunc := context .WithCancel (ctx )
42
+ func NewResultIterator (ctx context.Context , cancelFunc context.CancelFunc , ch chan * Result ) * ResultIterator {
48
43
iterator := & ResultIterator {
49
44
currentHandlerID : 0 ,
50
45
count : 0 ,
51
- ctx : cctx ,
52
- ch : ch ,
46
+ ctx : ctx ,
53
47
cancelFunc : cancelFunc ,
48
+ ch : ch ,
54
49
cancelled : false ,
55
50
handlers : map [int64 ]* subscriptionHanlderConfig {},
56
51
}
@@ -140,14 +135,16 @@ func Subscribe(p SubscribeParams) *ResultIterator {
140
135
ctx = context .Background ()
141
136
}
142
137
138
+ sctx , cancelFunc := context .WithCancel (ctx )
139
+
143
140
var mapSourceToResponse = func (payload interface {}) * Result {
144
141
return Execute (ExecuteParams {
145
142
Schema : p .Schema ,
146
143
Root : payload ,
147
144
AST : p .Document ,
148
145
OperationName : p .OperationName ,
149
146
Args : p .VariableValues ,
150
- Context : p . ContextValue ,
147
+ Context : sctx ,
151
148
})
152
149
}
153
150
@@ -168,7 +165,7 @@ func Subscribe(p SubscribeParams) *ResultIterator {
168
165
OperationName : p .OperationName ,
169
166
Args : p .VariableValues ,
170
167
Result : result ,
171
- Context : p . ContextValue ,
168
+ Context : sctx ,
172
169
})
173
170
174
171
if err != nil {
@@ -236,7 +233,7 @@ func Subscribe(p SubscribeParams) *ResultIterator {
236
233
Source : p .RootValue ,
237
234
Args : args ,
238
235
Info : info ,
239
- Context : exeContext . Context ,
236
+ Context : sctx ,
240
237
})
241
238
if err != nil {
242
239
result .Errors = append (result .Errors , gqlerrors .FormatError (err .(error )))
@@ -255,11 +252,9 @@ func Subscribe(p SubscribeParams) *ResultIterator {
255
252
case chan interface {}:
256
253
for {
257
254
select {
258
- case <- ctx .Done ():
259
- fmt .Printf ("done context called" )
255
+ case <- sctx .Done ():
260
256
return
261
257
case res := <- fieldResult .(chan interface {}):
262
-
263
258
resultChannel <- mapSourceToResponse (res )
264
259
}
265
260
}
@@ -270,5 +265,5 @@ func Subscribe(p SubscribeParams) *ResultIterator {
270
265
}()
271
266
272
267
// return a result iterator
273
- return NewResultIterator (p . ContextValue , resultChannel )
268
+ return NewResultIterator (sctx , cancelFunc , resultChannel )
274
269
}
0 commit comments