2017-04-13 38 views
0

我想使用一個異步函數,在fb登錄後使用FB令牌發佈API(如下所示)。不幸的是,在登錄回調之前會輸出未定義的accessToken。如何等待respondjs上的FB.login()回調?

// fbsdk 
window.fbAsyncInit = function() { 
    FB.init({ 
    appId  : '', 
    xfbml  : true, 
    version : 'v2.8' 
    }); 
    FB.AppEvents.logPageView(); 
}; 

(function(d, s, id){ 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) {return;} 
    js = d.createElement(s); js.id = id; 
    js.src = "//connect.facebook.net/en_US/sdk.js"; 
    fjs.parentNode.insertBefore(js, fjs); 
}(document, 'script', 'facebook-jssdk')); 
export default async function request(url, options) { 

    let accessToken = await FB.login(function (res) { 
     console.log(res.authResponse.accessToken) 
     return res.authResponse.accessToken; 
    }); 

    console.log(accessToken); 
    url = url+ '/access_token?=' + accessToken 
    const response = await fetch(url, { 
     method: 'POST', 
     body: {'access_token': accessToken}, 
    }); 

    const data = await response.json(); 

    const ret = { 
     data, 
     headers: {}, 
    }; 

    if (response.headers.get('x-total-count')) { 
     ret.headers['x-total-count'] = response.headers.get('x-total-count'); 
    } 

    console.log(ret); 

    return ret; 

} 

回答

1

您需要使用window.FB.Event.subscribe('auth.statusChange', your_callback_function)和your_callback_function你可以從Facebook獲得的accessToken。

+0

雖然這個鏈接可能回答這個問題,但僅在Stack Overflow上鍊接的答案是不鼓勵的,你可以通過獲取鏈接的重要部分並將其放入你的答案來改善這個答案,這確保你的答案仍然是一個答案,如果鏈接被更改或刪除:) – WhatsThePoint