@@ -143,12 +143,14 @@ def check_update(self, update):
143
143
state = self .conversations .get (key )
144
144
145
145
# Resolve promises
146
- if isinstance (state , Promise ):
146
+ if isinstance (state , tuple ):
147
147
self .logger .debug ('waiting for promise...' )
148
- state .result (timeout = self .run_async_timeout )
149
148
150
- if state .done .is_set ():
151
- self .update_state (state .result ())
149
+ old_state , new_state = state
150
+ new_state .result (timeout = self .run_async_timeout )
151
+
152
+ if new_state .done .is_set ():
153
+ self .update_state (new_state .result (), key )
152
154
state = self .conversations .get (key )
153
155
154
156
else :
@@ -207,10 +209,17 @@ def handle_update(self, update, dispatcher):
207
209
208
210
new_state = self .current_handler .handle_update (update , dispatcher )
209
211
210
- self .update_state (new_state )
212
+ self .update_state (new_state , self . current_conversation )
211
213
212
- def update_state (self , new_state ):
214
+ def update_state (self , new_state , key ):
213
215
if new_state == self .END :
214
- del self .conversations [self .current_conversation ]
216
+ del self .conversations [key ]
217
+
218
+ elif isinstance (new_state , Promise ):
219
+ self .conversations [key ] = (self .conversations [key ], new_state )
220
+
215
221
elif new_state is not None :
216
- self .conversations [self .current_conversation ] = new_state
222
+ self .conversations [key ] = new_state
223
+
224
+ elif isinstance (self .conversations [key ], tuple ):
225
+ self .conversations [key ] = self .conversations [key ][0 ]
0 commit comments