我有一個注入服務的服務。子服務連接到facebook api,並假設將用戶的登錄狀態返回給父服務。我面臨的問題是這個fb api調用使用了一個承諾,我試圖根據子服務函數調用的值在父服務中執行一些邏輯。這樣做的正確方法是什麼?從承諾中返回一個值
這是我的嘗試:
facebook.service.ts
注意,下面的代碼成功連接到 「連接」 Facebook的API和輸出,因爲它應該**
checkLoginStatus() {
this.FB.getLoginStatus((response) => {
console.log(response.status); //outputs "connected"
});
}
但是,我試圖返回承諾對父服務的響應中包含的值,所以我修改了代碼,如下所示...並獲取錯誤:
Uncaught (in promise): TypeError: Cannot read property 'getLoginStatus' of undefined
facebook.service.ts
FB:any;
constructor() {
facebook().then((FB) => {
// Initialize SDK
FB.init({
appId : '1111111111111111',
cookie : true, // enable cookies to allow the server to access
// the session
xfbml : true, // parse social plugins on this page
version : 'v2.8' // use graph api version 2.5
});
this.FB = FB;
});
}
checkLoginStatus() {
this.FB.getLoginStatus((response) => {
return response.status; //"connected"
});
}
home.service.ts
constructor(@Inject(FacebookService) private fb:FacebookService) {
this.authenticateFacebook();
}
authenticateFacebook() {
this.fb.checkLoginStatus().then((response) => {
console.log(response); //should output connected
});
}
如果沒有打印任何內容,則可能是傳遞給this.FB.getLoginStatus()的回調從不執行。可能是因爲getLoginStatus()調用失敗。它可能期望在發生錯誤時進行第二次回調。這個'FB.getLoginStatus()'方法的文檔在哪裏? –
@JBNizet,getLoginStatus成功並返回「connected」 – AnchovyLegend
「返回」是什麼意思。您沒有使用'this.FB.getLoginStatus()'返回的值。您正在傳遞迴調。你怎麼知道它返回什麼(或傳遞給你的回調),因爲沒有打印?再次,FB.getLoginStatus()的文檔是什麼?你指的只是允許加載facebook庫。它不記錄方法FB.getLoginStatus()。 –