Tại sao angular promise một cái cần $apply một cái thì không?

Mình viết hai cái angular factory promise theo hai kiểu khác nhau tại sao một cái thì phải cần $apply mới fire còn một cái thì không ? ace nào giải thích giúp?
Chi tiết như sau :


    app.factory('HelloWorld', function ($q, $timeout) {
        var getMessages = function () {
            var deferred = $q.defer();
            $timeout(function () {
                deferred.resolve(['Hello', 'world!']);
            }, 2000);
            return deferred.promise;
        };
        return {
            getMessages: getMessages
        };

    });
    app.factory('HelloWorld2', function ($timeout) {
        var that = {};
        that.GetMessages = function () {
            return new Promise(function (resolve, reject) {
                $timeout(function () {
                    resolve(['Hello2', 'world2!']);
                }, 2000);
            })
        }
        return that;
    });

controller :

    $scope.msg = " chờ 2000 ms và xem kết quả ";
    $scope.msg2 = " chờ 2000 ms và xem kết quả ";
    HelloWorld
        .getMessages()
        .then(function (x) {
            $scope.msg = x;
            //em này không cần $scope.$apply()
        })
    HelloWorld2.GetMessages()
        .then(function (x) {
            $scope.msg2 = x;
            $scope.$apply()
            //em này phải có $scope.$apply() // Why????
        })

html :

            {{msg}}<br>
            {{msg2}}<br>
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?