AngularJS: странное поведение console.log с асинхронным chrome.storage.local.get()

Дайте мне знать, если вам нужна дополнительная информация для решения этой проблемы.

Я пытаюсь получить локальные данные с помощью фабрики и вызывать ее из контроллера.

Контроллер.js:

storage.getAllLocalInfo().then(function(data){
    console.log(data.distractions[0].type);
    // produces 'url'
            // console.log(data.distractions);
    // produces the following
    //  0: Object
    //      oldTxt: "youtube.com"
    //      txt: "youtube.com"
    //      type: undefined
    $scope.distractions = data.distractions;
            // This only happens when executing the line above.
    // Without that line, there is no inconsistency.
});

Как получается, что если я запрашиваю вложенное свойство (type), консоль возвращает правильное значение, но когда я запрашиваю весь объект, type возвращает как undefined. Это происходит только тогда, когда я включаю строку с $scope.distractions. И связанная фабрика:

var getAllLocalInfo = function() {
    var deferred = $q.defer();
    chromeStorage.get( null , function( data ) {
        if (!data) {
            deferred.reject();
        } else {
            deferred.resolve(data);
        }
    });
    return deferred.promise;
};

Кто-нибудь может объяснить странное поведение console.log в контроллере? Я также новичок в обещаниях, так что это может быть то, что я испортил, хотя это также вело себя так же при использовании обратного вызова на фабрике вместо обещания.


person willthefirst    schedule 03.01.2014    source источник
comment
Извините, я не понимаю: что вы имеете в виду, говоря, что это происходит только при выполнении строки выше? Не могли бы вы объяснить странность чуть более подробно?   -  person gkalpak    schedule 04.01.2014
comment
обновлено: как получается, что если я запрашиваю вложенное свойство (type), консоль возвращает правильное значение, но когда я запрашиваю весь объект, type возвращается как undefined. Это происходит только тогда, когда я включаю строку с $scope.distractions.   -  person willthefirst    schedule 04.01.2014
comment
Не могли бы вы опубликовать где-нибудь весь код расширения, чтобы я мог воспроизвести проблему?   -  person gkalpak    schedule 04.01.2014
comment
Вот: github.com/willthefirst/decide/tree/master/extension   -  person willthefirst    schedule 05.01.2014
comment
Я поиграл, но не смог воспроизвести проблему (например, periodBeingUsed постоянно был false в обоих console.log). Если возможно, добавьте несколько шагов/инструкций для воспроизведения проблемы и/или опубликуйте SSCCE.   -  person gkalpak    schedule 05.01.2014