¿Cómo cargar de forma asíncrona un mapa de google en AngularJS?

Ahora que he encontrado una manera de inicializar Google Maps con la ayuda deAndy Joslin en este SOInicializar google-map-in-angularjsEstoy buscando una forma de cargar de forma asíncrona un objeto de mapa de Google.

Encontré un ejemplo de cómo hacer esto en elfonecato proyecto.

Observe cómo se cargan los archivos JS en este ejemplo:index-async.html

En mi parcial de Jade Scripts que está cargado en mi programa, lo intenté:

script(src='js/lib/angular/angular.js')
script(src='js/lib/script/script.min.js')

script
  $script([
    'js/lib/angular/angular-resource.min.js',
    'js/lib/jquery/jquery-1.7.2.min.js',
    'http://maps.googleapis.com/maps/api/js?key=AIzaSyBTmi_pcXMZtLX5MWFRQgbVEYx-h-pDXO4&sensor=false',
    'js/app.js',
    'js/services.js',
    'js/controllers.js',
    'js/filters.js',
    'js/directives.js',
    'bootstrap/js/bootstrap.min.js'
    ], function() {
      // when all is done, execute bootstrap angular application
      angular.bootstrap(document, ['ofm']);
    });

Cuando hago esto y voy a cargar la página del mapa obtengo:

A call to document.write() from an asycrononously-loaded 
external script was ignored.

Así es como se está cargando Google Maps ahora como un servicio:

'use strict';

var app = angular.module('ofm.services', []);

app.factory('GoogleMaps', function() {

  var map_id  = '#map';
  var lat     = 46.87916;
  var lng     = -3.32910;
  var zoom    = 15;
  var map     = initialize(map_id, lat, lng, zoom);

  return map;
});

function initialize(map_id, lat, lng, zoom) {
  var myOptions = {
    zoom : 8,
    center : new google.maps.LatLng(lat, lng),
    mapTypeId : google.maps.MapTypeId.ROADMAP
  };
  return new google.maps.Map($(map_id)[0], myOptions);
}

Parece que esto debería devolver una promesa de lo que recuerdo haber leído. Pero este AngularJS es muy nuevo para mí.

Respuestas a la pregunta(3)

Su respuesta a la pregunta