¿Cuáles son los inconvenientes de usar una llamada ajax sincrónica?

Esta pregunta seguramente podría aplicarse a jQuery, pero en este caso me estoy refiriendo a Prototype. En el documento Prototype dice:

Dado que el uso sincrónico es bastante inquietante y, por lo general, de mal gusto, debe evitar cambiar esto. Seriamente

No estoy seguro de cuáles son los inconvenientes de usar una llamada ajax síncrona. Parece que hay muchos casos en los que debe esperar a que vuelva la llamada (sin utilizar las funciones específicas de devolución de llamada). Por ejemplo, actualmente uso Prototype'sonSuccess, onFailure and onComplete para manejar el resto del código.

Sin embargo, los servicios web que utilizo (todos internos) abarcan la mayoría de los proyectos y se me ha encomendado la tarea de crear un código más reutilizable. Un ejemplo sería una clase de cliente que devuelve las propiedades del cliente. Un ejemplo simple (tenga en cuenta que solo estoy mostrando las funciones básicas para mantenerlo simple):

Customer = Class.create({ 

    initialize: function(customerId) { 

        new Ajax.Request('some-url', {
            method: 'get',
            parameters: {
                customerId: customerId
            },
            onSuccess: this.setCustomerInfo.bind(this)
        }

    },

    setCustomerInfo: function(response) {

        //for the sake of this example I will leave out the JSON validation

        this.customerInfo = response.responseText.evalJSON();

    } 

});

Entonces, usando esa clase simple, puedo hacer lo siguiente en cualquier proyecto para obtener la información del cliente.

var customer = new Customer(1);

//now I have the customer info
document.write(customer.customerInfo.firstName);

El uso del código anterior no imprimirá el nombre del cliente. Esto se debe a que la llamada ajax es asíncrona. Ejecutará ladocument.write si el servicio web devolvió o no los datos del cliente. Pero no quiero hacer nada hasta que los datos hayan regresado y la variable del cliente esté configurada. Para solucionar esto, configuré la llamada ajax en síncrono para que el navegador no continúe hasta quenew Customer(1); Está terminado

Este método parece funcionar (establecer asíncrono a falso) pero leer los documentos de Prototype me da una pausa. ¿Cuál es el inconveniente de usar este método? ¿Hay otra forma de hacerlo, más eficiente, etc.?

Le agradecería cualquier comentario

Respuestas a la pregunta(4)

Su respuesta a la pregunta