Esperando que la llamada a la API termine en Javascript antes de continuar

algo con lo que he luchado en el pasado y con el que estoy luchando hoy es evitar que un API / AJAX continúe hasta que hayas recibido tu respuesta. Actualmente estoy trabajando con la API de Facebook. Necesito obtener una respuesta de una llamada y luego devolverla, pero lo que está sucediendo es que mi función está regresando antes de recibir una respuesta de la llamada a la API. ¡Sé por qué está sucediendo, simplemente no puedo descubrir cómo prevenirlo! Aquí está mi código ...

function makeCall(){

var finalresponse = "";
    var body = 'Test post';

      FB.api('/me/feed', 'post', { message: body }, function(response) {
        if (!response || response.error) {
         finalresponse = response.error;
        } else {
          finalresponse = 'Post ID: ' + response.id;
        }
      });
      return finalresponse;

}

// ----- EDITAR

Noté que algunas personas sugirieron algo como esto ...

function makeCall(){
var finalresponse = "";
FB.api('/me/feed', 'post', { message: body }, function(response) {
        if (!response || response.error) {
         finalresponse = response.error;
         return finalresponse;
        } else {
          finalresponse = 'Post ID: ' + response.id;
          return finalresponse;
        }
      });
}

Pero esto vuelve indefinido.

// EDITAR BASADO EN ACTUALIZACIONES

function share_share(action_id){

  var finalresponse = makeCall(action_id, process);
  return finalresponse;

}

function makeCall(action_id, callback){

var body = 'Test post';
      FB.api('/me/feed', 'post', { message: body }, function (response) {
        if (!response || response.error) {
         var finalresponse = response.error;
        } else {
          finalresponse = 'Post ID: ' + response.id;
        }
        callback(action_id, finalresponse);
      });

}
function process(action_id, finalresponse){
  console.log(finalresponse);
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta