coś, z czym borykałem się w przeszłości i zmagam się z dzisiejszymi problemami, uniemożliwia kontynuowanie interfejsu API/AJAX, dopóki nie otrzymasz odpowiedzi. obecnie pracuję z interfejsem API Facebooka. Muszę uzyskać odpowiedź z połączenia, a następnie ją zwrócić, ale to, co się dzieje, to to, że moja funkcja wraca, zanim otrzymam odpowiedź z wywołania API. Wiem, dlaczego to się dzieje, po prostu nie mogę wymyślić, jak temu zapobiec! Oto mój kod ...Oczekiwanie na wywołanie API w języku Javascript przed kontynuowaniem
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
zauważyłem niektórzy ludzie zasugerował coś takiego ...
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;
}
});
}
Ale to zwraca niezdefiniowana
// EDYCJA OPARTA NA AKTUALIZACJI
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);
}
Wierzę, ponieważ twoja 'return finalresponse;' jest poza wywołaniem API. –
Twój powrót zostanie wykonany, zanim FB.api zakończy – Dhiraj
kod podany podczas edycji jest niepoprawny. Zwrócenie ostatecznej odpowiedzi w twoim oddzwonieniu zostanie zwrócone do dzwoniącego oddzwonionego z odpowiedzi. Powód niezdefiniowany jest zwracany do wywołującego dla makeCall(), ponieważ wywołanie nie zwraca niczego. –