@@ -202,16 +202,15 @@ function MonacoEditor ({
202202 editorRef . current ! . setModel ( null )
203203 return
204204 }
205- let cancelled = false
206- async function updateModel ( ) {
205+ const disposableStore = new DisposableStore ( )
206+ async function updateModel ( ) : Promise < void > {
207207 modelRef . current = undefined
208208 editorRef . current ! . setModel ( null )
209209 setModelReady ( false )
210210
211211 const value = valueRef . current
212212 let modelIRef : IReference < ITextFileEditorModel > | undefined
213213 let model : monaco . editor . ITextModel
214- const disposableStore = new DisposableStore ( )
215214 if ( fileUri != null ) {
216215 const uri = monaco . Uri . parse ( fileUri )
217216
@@ -224,9 +223,8 @@ function MonacoEditor ({
224223 }
225224 } )
226225 modelIRef = ( await modelIRefPromise ) !
227- if ( cancelled ) {
228- modelIRef . dispose ( )
229- return ( ) => { }
226+ if ( disposableStore . isDisposed ) {
227+ return
230228 }
231229 disposableStore . add ( modelIRef . object . onDidSave ( lastOnDidSave ) )
232230 model = modelIRef . object . textEditorModel !
@@ -243,17 +241,17 @@ function MonacoEditor ({
243241 if ( editorRef . current != null ) {
244242 lastRestoreViewState ( editorRef . current , model )
245243 }
246- return ( ) => {
247- if ( editorRef . current != null ) {
248- lastSaveViewState ( editorRef . current , model )
244+ disposableStore . add ( {
245+ dispose ( ) {
246+ if ( editorRef . current != null ) {
247+ lastSaveViewState ( editorRef . current , model )
248+ }
249249 }
250- disposableStore . dispose ( )
251- }
250+ } )
252251 }
253- const disposePromise = updateModel ( )
252+ updateModel ( ) . catch ( console . error )
254253 return ( ) => {
255- cancelled = true
256- disposePromise . then ( dispose => dispose ( ) , console . error )
254+ disposableStore . dispose ( )
257255 }
258256 } , [ monacoLanguage , fileUri , valueRef , lastSaveViewState , lastRestoreViewState , hasValue , lastOnDidSave ] )
259257
0 commit comments