Angular JS: como se ligar a promessas

Estou tentando vincular uma promessa a uma visão. Eu não sei se você pode fazer isso diretamente, mas é o que eu estou tentando fazer. Alguma idéia do que estou fazendo errado?

Nota: a fonte é um pouco inventada com o tempo limite e usa dados estáticos, mas isso torna o código mais fácil de diagnosticar.

EDITAR: Página JSFiddle:http://jsfiddle.net/YQwaf/27/

EDIT: SOLUÇÃO: Acontece que vocêposso vincular diretamente promessas. Eu tive dois problemas com o meu código original:

Usar setTimeout () em vez do $ timeout do angular foi um problema. Angular não sabe que precisa atualizar a interface do usuário quando o tempo limite é acionado (você pode resolver isso com $ scope. $ Apply dentro de setTimeout, ou você pode apenas usar $ timeout)Ligar a uma função que retornou uma promessa foi um problema. Se for chamado pela segunda vez, isso faz outra promessa. Melhor é definir uma variável de escopo como promessa e criar apenas uma nova promessa, conforme necessário. (No meu caso, isso estava chamando $ scope. $ Watch no código do país)

HTML:

<div ng:controller="addressValidationController">
    Region Code <select ng:model="regionCode" ng:options="r.code as r.name for r in getRegions()"/>
    Country Code<select ng:model="countryCode"><option value="US">United States</option><option value="CA">Canada</option></select>
</div>

JS:

function addressValidationController($scope, $q) {
    var regions = {
        US: [{code: 'WI',name: 'Wisconsin'}, {code: 'MN',name: 'Minnesota'}], 
        CA: [{code: 'ON',name: 'Ontario'}]
    };
    $scope.getRegions = function () {
        var deferred = $q.defer();
        setTimeout(function () {
            var countryRegions = regions[$scope.countryCode];
            console.log(countryRegions);
            if(countryRegions === undefined) {
                deferred.resolve([]);
            } else {
                deferred.resolve(countryRegions);
            }
        }, 1000);
        return deferred.promise;
    };
}

questionAnswers(4)

yourAnswerToTheQuestion