@@ -313,31 +313,28 @@ export function update_reaction(reaction) {
313
313
var result = /** @type {Function } */ ( 0 , reaction . fn ) ( ) ;
314
314
var deps = reaction . deps ;
315
315
316
- // Avoid doing work on an effect/derived that might have become destroyed
317
- if ( ( flags & DESTROYED ) === 0 ) {
318
- if ( new_deps !== null ) {
319
- var i ;
316
+ if ( new_deps !== null ) {
317
+ var i ;
320
318
321
- remove_reactions ( reaction , skipped_deps ) ;
319
+ remove_reactions ( reaction , skipped_deps ) ;
322
320
323
- if ( deps !== null && skipped_deps > 0 ) {
324
- deps . length = skipped_deps + new_deps . length ;
325
- for ( i = 0 ; i < new_deps . length ; i ++ ) {
326
- deps [ skipped_deps + i ] = new_deps [ i ] ;
327
- }
328
- } else {
329
- reaction . deps = deps = new_deps ;
321
+ if ( deps !== null && skipped_deps > 0 ) {
322
+ deps . length = skipped_deps + new_deps . length ;
323
+ for ( i = 0 ; i < new_deps . length ; i ++ ) {
324
+ deps [ skipped_deps + i ] = new_deps [ i ] ;
330
325
}
326
+ } else {
327
+ reaction . deps = deps = new_deps ;
328
+ }
331
329
332
- if ( ! skip_reaction ) {
333
- for ( i = skipped_deps ; i < deps . length ; i ++ ) {
334
- ( deps [ i ] . reactions ??= [ ] ) . push ( reaction ) ;
335
- }
330
+ if ( ! skip_reaction ) {
331
+ for ( i = skipped_deps ; i < deps . length ; i ++ ) {
332
+ ( deps [ i ] . reactions ??= [ ] ) . push ( reaction ) ;
336
333
}
337
- } else if ( deps !== null && skipped_deps < deps . length ) {
338
- remove_reactions ( reaction , skipped_deps ) ;
339
- deps . length = skipped_deps ;
340
334
}
335
+ } else if ( deps !== null && skipped_deps < deps . length ) {
336
+ remove_reactions ( reaction , skipped_deps ) ;
337
+ deps . length = skipped_deps ;
341
338
}
342
339
343
340
return result ;
@@ -748,7 +745,10 @@ export function get(signal) {
748
745
// If the derived is destroyed, just execute it again without retaining
749
746
// it's memoisation properties – as the derived is stale
750
747
if ( is_derived && ( flags & DESTROYED ) !== 0 ) {
751
- return execute_derived ( /** @type {Derived } */ ( signal ) ) ;
748
+ var value = execute_derived ( /** @type {Derived } */ ( signal ) ) ;
749
+ // Ensure the derived remains destroyed
750
+ destroy_derived ( /** @type {Derived } */ ( signal ) ) ;
751
+ return value ;
752
752
}
753
753
754
754
if ( is_signals_recorded ) {
0 commit comments