mirror of
https://github.com/angular/angular
synced 2026-05-24 09:28:37 +00:00
fix(core): handle deref returning null on RefactiveNode. (#50992)
On Safari <16.1 there is a bug where `deref` can return `null`. Fixes #50989 PR Close #50992
This commit is contained in:
parent
29aaded0c3
commit
5d6ec0336b
1 changed files with 7 additions and 2 deletions
|
|
@ -149,7 +149,9 @@ export abstract class ReactiveNode {
|
|||
for (const [producerId, edge] of this.producers) {
|
||||
const producer = edge.producerNode.deref();
|
||||
|
||||
if (producer === undefined || edge.atTrackingVersion !== this.trackingVersion) {
|
||||
// On Safari < 16.1 deref can return null, we need to check for null also.
|
||||
// See https://github.com/WebKit/WebKit/commit/44c15ba58912faab38b534fef909dd9e13e095e0
|
||||
if (producer == null || edge.atTrackingVersion !== this.trackingVersion) {
|
||||
// This dependency edge is stale, so remove it.
|
||||
this.producers.delete(producerId);
|
||||
producer?.consumers.delete(this.id);
|
||||
|
|
@ -177,7 +179,10 @@ export abstract class ReactiveNode {
|
|||
try {
|
||||
for (const [consumerId, edge] of this.consumers) {
|
||||
const consumer = edge.consumerNode.deref();
|
||||
if (consumer === undefined || consumer.trackingVersion !== edge.atTrackingVersion) {
|
||||
|
||||
// On Safari < 16.1 deref can return null, we need to check for null also.
|
||||
// See https://github.com/WebKit/WebKit/commit/44c15ba58912faab38b534fef909dd9e13e095e0
|
||||
if (consumer == null || consumer.trackingVersion !== edge.atTrackingVersion) {
|
||||
this.consumers.delete(consumerId);
|
||||
consumer?.producers.delete(this.id);
|
||||
continue;
|
||||
|
|
|
|||
Loading…
Reference in a new issue