Tengo un JSON grande que cargo en mi aplicación a través de una etiqueta <script> . el archivo JS que contiene el JSON tiene aproximadamente 280k. Es una definición JS estándar:
var _countries = {"country:{"USA":{...},"GBR":{ ...},"FRA":( ...}, etc, etc ...}}} ; Se está cargando en la memoria a medida que se inicia la aplicación y luego quiero copiarlo en una nueva variable $rootScope , no solo una referencia al objeto original, y luego, después de que se haya copiado por completo, quiero eliminar el objeto _countries original.
$rootScope._countries= angular.copy(_countries) ; _countries = null ; Pero, ¿cómo puedo saber cuándo el objeto se ha copiado por completo antes de eliminar por completo el objeto _countries original? JS es asíncrono, no quiero arriesgarme a que $rootScope._countries no tenga el objeto completo antes de que el valor nulo elimine el original.
Además, ¿hay una mejor manera de copiar el objeto original que usar angular.copy() ?
Una asignación de variable de datos simple como esta siempre se ejecutará sincrónicamente:
const foo = {...superBig} // definitely already just JSONSi estaba leyendo del JSON en la asignación de variables, por ejemplo...
var _countries = funcToLoadJSON('path-to-my-json')... esa podría ser una historia diferente dependiendo de los detalles de implementación, ya que hay algunos métodos que lo hacen de forma sincrónica y otros que lo hacen de forma asincrónica. Ver ejemplos .
Realmente no puedes eliminar ningún objeto en Javascript. Los motores JS intentan determinar el "mejor" momento para realizar la recolección de elementos no utilizados en función de un puñado de factores en segundo plano.