Consecutive calls to console.log produce inconsistent results

廉价感情. 提交于 2020-01-11 03:10:07

问题


Ok, I'm completely dumbfounded by this. (and I might be overlooking something obvious but...)

I have 2 consecutive calls to console.log. There isn't anything else between them

console.log($state);
console.log($state.current);

and here's an image of the produced results

Why do the 2 produce different "current" objects? How can this happen?


Context:

Those calls are made inside an ajax call while resolving a route dependencies. If you need more code or context let me know.

Confirmed the same issue in Chrome and Firefox

Ajax call and wrapper function (no modifications whatsoever)

normaCtrl.publicNorma = ['$http', '$state', '$stateParams', 'baseUrl', function ($http, $state, $stateParams, baseUrl)
{
    var id = $stateParams.id;
    return $http.get(baseUrl + "api/public/norma/" + id).then(
        function (response) {
            console.log($state);
            console.log($state.current);
            console.log($state.current.title);
            return response.data;
        }
    );
}];

Possible related questions

  • javascript console.log displays different values on same object

  • AngularJS: weird console.log behavior with async chrome.storage.local.get()


回答1:


Well, here's the answer for those that stumble upon this.

Short Answer

Console.log shows deep mutable objects at the last state of execution, not at the state when console.log was called.

More details

Basically, when working with mutable deep objects, Console.log stores the reference to said object instead of storing an object clone.

Since there is a time gap between storing and visualization, when you click the arrow for further inspection what you're seeing is actually the current state of the object and not the the state of the object when console.log was called.

One way to always make sure you're using an "object snapshot" is to call Json.stringify or use console.dir when available.




回答2:


Weird. Is it an ECMA 5 object that has a weird getter? Still wouldn't make sense for the plain $state call. I assume there's not just something broken with your GC...

Are you sure these are the calls being logged?



来源:https://stackoverflow.com/questions/22059811/consecutive-calls-to-console-log-produce-inconsistent-results

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!