Warten Sie, bis der API-Aufruf in Javascript abgeschlossen ist, bevor Sie fortfahren

Etwas, mit dem ich in der Vergangenheit zu kämpfen hatte und mit dem ich heute zu kämpfen habe, ist zu verhindern, dass eine API / AJAX fortgesetzt wird, bis Sie Ihre Antwort erhalten haben. Derzeit arbeite ich mit der Facebook-API. Ich muss eine Antwort von einem Aufruf erhalten und dann zurückgeben, aber was passiert ist, dass meine Funktion zurückgibt, bevor ich jemals eine Antwort vom API-Aufruf bekomme. Ich weiß, warum es passiert, ich kann nur nicht herausfinden, wie ich es verhindern kann! Hier ist mein Code ...

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;

}

// ----- EDIT

Mir ist aufgefallen, dass einige Leute so etwas vorgeschlagen haben ...

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;
        }
      });
}

Dies ist jedoch undefiniert

// NACH UPDATES BEARBEITEN

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);
}

Antworten auf die Frage(3)

Ihre Antwort auf die Frage