【发布时间】:2016-11-10 01:14:11
【问题描述】:
我有一个注入服务的服务。子服务连接到 facebook api,并假设将用户的登录状态返回给父服务。我面临的问题是这个 fb api 调用使用了一个承诺,我试图根据子服务函数调用的值在父服务中执行一些逻辑。这样做的正确方法是什么?
这是我尝试过的:
facebook.service.ts
请注意,以下代码成功连接到 facebook api 并输出“已连接”**
checkLoginStatus() {
this.FB.getLoginStatus( (response) => {
console.log(response.status); //outputs "connected"
});
}
但是,我试图将 promise 的响应中包含的值返回给父服务,所以我修改了代码如下...并得到错误:
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 成功并返回“已连接”
-
“返回”是什么意思。您没有使用
this.FB.getLoginStatus()返回的值。你正在传递一个回调。你怎么知道它返回什么(或传递给你的回调),因为什么都没有打印?同样,FB.getLoginStatus() 的文档是什么?您所指的只是允许加载 facebook 库。它没有记录方法 FB.getLoginStatus()。 -
发布了文档。我知道它返回什么 b/c 我记录了对控制台的响应(请参阅编辑的代码)。事实上,
getLoginStatus在响应中包含一个字符串,表示身份验证成功,我正在尝试将其返回给父服务。
标签: angular typescript promise