điều tôi đã gặp khó khăn trong quá khứ và đang gặp khó khăn với hôm nay đang ngăn không cho API/AJAX tiếp tục cho đến khi bạn nhận được phản hồi của mình. hiện tôi đang làm việc với API Facebook. Tôi cần nhận được phản hồi từ một cuộc gọi rồi trả lại cuộc gọi nhưng những gì đang xảy ra là chức năng của tôi sẽ trở lại trước khi tôi nhận được phản hồi từ cuộc gọi API. Tôi biết tại sao nó xảy ra, tôi không thể tìm ra cách ngăn chặn nó! Dưới đây là mã của tôi ...Đang chờ lệnh gọi API kết thúc bằng Javascript trước khi tiếp tục
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
tôi nhận thấy một số người đề nghị một cái gì đó như thế này ...
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;
}
});
}
Nhưng điều này trả về undefined
// CHỈNH SỬA DỰA TRÊN CẬP NHẬT
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);
}
Tôi tin rằng vì 'return finalresponse;' nằm ngoài cuộc gọi API. –
sự trở lại của bạn sẽ thực thi trước khi FB.api hoàn thành – Dhiraj
mã bạn cung cấp trong bản chỉnh sửa của mình không chính xác. Trả về finalResponse trong cuộc gọi lại của bạn sẽ được trả lại cho người gọi về cuộc gọi trả lời của bạn. Lý do không xác định được trả về cho người gọi cho makeCall() là bởi vì thực hiện cuộc gọi không trả lại bất cứ điều gì. –