Последовательные вызовы console.log вызывают несогласованные результаты
Хорошо, я полностью ошеломлен этим. (и я мог бы игнорировать что-то очевидное, но...)
У меня есть два последовательных вызова в console.log. Между ними нет ничего другого.
console.log($state);
console.log($state.current);
и здесь изображение полученных результатов
![Console.log screenshot]()
Почему 2 производят разные "текущие" объекты? Как это может случиться?
Контекст:
Эти вызовы выполняются внутри вызова ajax при разрешении зависимостей маршрута. Если вам нужно больше кода или контекста, дайте мне знать.
Подтверждена та же проблема в Chrome и Firefox
Функция вызова и обертки Ajax (без каких-либо изменений)
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;
}
);
}];
Возможные связанные вопросы
Ответы
Ответ 1
Ну, вот ответ для тех, кто наткнется на это.
Короткий ответ
Console.log показывает глубокие изменяемые объекты в последнем состоянии выполнения, но не в состоянии , когда console.log был вызван.
Подробнее
В принципе, при работе с изменяемыми глубокими объектами Console.log сохраняет ссылку на указанный объект вместо хранения клонирования объекта.
Так как существует промежуток времени между хранением и визуализацией, когда вы нажимаете стрелку для дальнейшего контроля, то, что вы видите, на самом деле текущее состояние объекта, а не состояние объекта, когда console.log был вызван.
Один из способов всегда убедиться, что вы используете "моментальный снимок объекта", - это вызвать Json.stringify
или использовать console.dir
, когда он доступен.
Ответ 2
Weird. Это объект ECMA 5, который имеет странный геттер? Все еще не имеет смысла для простого $state call. Я предполагаю, что не только что-то сломано с вашим GC...
Вы уверены, что это зарегистрированные вызовы?