如何使用javascript或jquery等待facebook javascript api响应

时间:2015-06-02 09:06:14

标签: javascript jquery facebook facebook-graph-api facebook-javascript-sdk

我希望我的postuserWall()函数等待FB.api响应,然后返回true或false。但它不等待响应。 我怎样才能让它等待响应 这是我的主函数,它调用postuserWall函数,警报显示undefined

$('.vacancies_tbl').on('click', '.btn-edit-vacancy', function(e) {
        e.preventDefault();
         var $this = $(this);                   
         var chcek =  postuserWall();
         alert(chcek);
         if(check){
            window.location = $this.attr('href');
         }                                                              
}); 

这是我的postuserWall函数

 function postuserWall(){

        var body = 'Usama New Post';
        FB.api('/me/feed', 'post', { message: body }, function(response) {
          if (!response || response.error) {
            console.log(response);
            alert('Error occured');
            return false;
          } else {
            alert('Post ID: ' + response.id);
            return true;
          }
        });
    }

它没有等待postuserWall函数中的响应

1 个答案:

答案 0 :(得分:1)

一种解决方案(确保您了解异步意味着什么,这在JavaScript中非常重要):

$('.vacancies_tbl').on('click', '.btn-edit-vacancy', function(e) {
    e.preventDefault();
    var $this = $(this);                   
    postUserWall(function(check) {
        alert(check);
        if(check){
            window.location = $this.attr('href');
        }
    });                                                             
}); 

function postUserWall(callback) {
    var body = 'Usama New Post';
    FB.api('/me/feed', 'post', {message: body}, function(response) {
        if (!response || response.error) {
            console.log(response);
            alert('Error occured');
            callback(false);
        } else {
            alert('Post ID: ' + response.id);
            callback(true);
        }
    });
}

您也可以使用Promises,但这对于一次回调来说太过分了。