Crea promesa en AngularJS

Estoy tratando de crear una promesa en Angular con el servicio $ q. Devuelve un objeto recuperado de un servicio web. Si el objeto está en el caché, lo devuelve sin llamar al servicio web.

El problema es que se llaman las dos resoluciones.

Tal vez, ¿estoy usando una promesa anti-patrón?

Aquí está mi código:

    function returnMapAsync() {

  return $q(function (resolve, reject) {
    if (navigationMap) {
      resolve(navigationMap);
    } else {
      ServerRequest.getNavigationMap().then(function (data) {
        navigationMap = data.object;
        resolve(navigationMap);
      });
    }
  });
}

Gracias

Respuestas a la pregunta(2)

Su respuesta a la pregunta