То, с чем я боролся в прошлом, и сегодня борюсь с этим, предотвращает продолжение API/AJAX до тех пор, пока вы не получите ответ. в настоящее время я работаю с API Facebook. Мне нужно получить ответ от вызова, а затем вернуть его, но то, что происходит, это то, что моя функция возвращается, прежде чем я получаю ответ от вызова API. Я знаю, почему это происходит, я просто не могу понять, как это предотвратить! Вот мой код ...Ожидание вызова API для завершения в Javascript перед продолжением
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
Я заметил, некоторые люди предложили что-то вроде этого ...
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;
}
});
}
Но это возвращает неопределенное
// РЕДАКТИРОВАНИЕ НА ОСНОВЕ ОБНОВЛЕНИЯ
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);
}
Я верю, потому что ваш ответ return finalresponse; 'находится за пределами вызова API. –
Ваше возвращение будет выполнено до того, как FB.api завершит – Dhiraj
, код, который вы указали при редактировании, неверен. Возврат finalResponse в вашем обратном вызове будет возвращен вызывающей стороне вашего обратного вызова ответа. Причина undefined возвращается вызывающему для makeCall(), потому что make-вызов ничего не возвращает. –