2014-10-29 2 views
0

Мне нужно позвонить FB.logout() и выйти из приложения сразу. Чтобы выйти из приложения, необходимо нажать DELETE /signout, который происходит после нажатия #sign_out_btn. Я привязал событие onclick к кнопке, чтобы позвонить FB.logout(), прежде чем это произойдет.wait for FB.logout() в событии onclick

Моя первая попытка:

$('#sign_out_btn').click(function(e) { 
    FB.getLoginStatus(function(response) { 
    if (response.status === 'connected') { 
     FB.logout(function(response){ 
     return true; 
     }); 
    } else { 
     return true; 
    }); 
}); 

не работает, потому что FB.logout() вызывается асинхронно и приложение переходит выполнить DELETE /signout вызов и переадресовывает, поэтому FB.logout() вызов никогда не сделал.

я придумал обходной путь, в котором я мешающее сделать оригинальный вызов к серверу на кнопку мыши и сделать DELETE запрос с использованием ajax в logout обратного вызова и перенаправляет страницу вручную после:

$('#sign_out_btn').click(function(e) { 
    e.preventDefault(); 
    FB.getLoginStatus(function(response) { 
    if (response.status == 'connected') { 
     FB.logout(function(response) { 
     $.ajax({ 
      url: '/signout', 
      type: 'DELETE', 
      success: function(result) { 
      return window.location = '/'; 
      } 
     }); 
     }); 
    } 
    }); 
    return false; 
}); 

Он работает, но на самом деле это не похоже на умное решение. Любые лучшие идеи?

ответ

0

Это законное решение imho. Чтобы избежать «обратного ада», вы также можете использовать Promises. Вот некоторые полезные ресурсы о том, что:

Btw, я хотел бы использовать FB.getLoginStatus на странице загрузки только и хранить информацию, если пользователь вошел в систему Вы бы сохранить. вызов API в процедуре выхода из системы таким образом.