Sobald ein Versprechen aufgelöst wurde, haben Versuche, es erneut zu lösen, keine Auswirkung, was bedeutet, dass der aufgelöste Wert immer eine strikte Gleichheit mit dem ursprünglichen aufgelösten Wert hat. Dies bedeutet jedoch nicht, dass der Wert sich nicht ändern kann, d. H. "bedeutet keine tiefe Unveränderlichkeit".
Dies kann mit einem Beispiel demonstriert werden:
var value = [1];
var p = Promise.resolve(value);
p.then(a => console.log(a)); // [1]
p.then(a => console.log(a === value)); // true
p.then(a => { a = [2]; console.log(a);}); // [2]
p.then(a => console.log(a)); // [1]
p.then(a => { a[0] = 2; console.log(a);}); // [2]
p.then(a => console.log(a)); // [2]
p.then(a => console.log(a === value)); // true
Wie Sie den Wert aus dem aufgelösten Versprechen bleibt den gleichen Objektwert im gesamten zurück sehen - a === value
. Versuche, das Objekt an einen anderen Wert zu binden, gelten nur innerhalb des Bereichs des then-Blocks und wir sehen den ursprünglichen Objektwert beim nächsten Aufruf der then-Methode für das Versprechen.
Wenn wir den Wert einer der Eigenschaften dieses Arrays ändern, in diesem Fall das erste Element, bemerken wir, dass diese Änderung den ursprünglichen Wert und damit auch den aufgelösten Wert beeinflusst, der von diesem Versprechen zurückgegeben wird. Wenn der aufgelöste Wert eine tiefe Unveränderbarkeit hätte, wären alle seine Eigenschaften und ihre Eigenschaften unveränderlich, jedoch haben wir gerade gezeigt, dass dies nicht der Fall ist.
Sie müssen entlang der Linien denken, wie '===' funktioniert und was es tut, um festzustellen, ob zwei Dinge gleich sind. –
Oder schauen Sie sich an, wie 'const' funktioniert. "Konst" -Werte haben eine unveränderliche Identität, sind aber nicht tief unveränderlich. – Tex