我正在开发一个应用程序来获取facebook上的一些活动,看一看:
EventComponent:
events: Object[] = [];
constructor(private eventService: EventService) {
this.eventService.getAll()
.subscribe(events => this.events = events)
}EventService:
getAll() {
const accessToken = 'xxxxxxxxxxx';
const batch = [{...},{...},{...},...];
const body = `access_token=${accessToken}&batch=${JSON.stringify(batch)}`;
return this.http.post('https://graph.facebook.com', body)
.retry(3)
.map(response => response.json())
}AuthenticationService:
getAccessToken() {
return new Promise((resolve: (response: any) => void, reject: (error: any) => void) => {
facebookConnectPlugin.getAccessToken(
token => resolve(token),
error => reject(error)
);
});
}我有几个问题:
1)如何设置间隔以每60秒更新一次事件?
2) accessToken的价值实际上来自于一个承诺,我应该这样做吗?
getAll() {
const batch = [{...},{...},{...},...];
this.authenticationService.getAccessToken().then(
accessToken => {
const body = `access_token=${accessToken}&batch=${JSON.stringify(batch)}`;
return this.http.post('https://graph.facebook.com', body)
.retry(3)
.map(response => response.json())
},
error => {}
);
}3)如果是,我如何处理来自getAccessToken()承诺的错误,因为我只返回观察者?
4) post请求的响应在默认情况下不会返回一个对象数组,我将不得不进行一些操作。我应该这样做吗?
return this.http.post('https://graph.facebook.com', body)
.retry(3)
.map(response => response.json())
.map(response => {
const events: Object[] = [];
// Manipulate response and push to events...
return events;
})发布于 2016-03-14 09:37:07
以下是你的问题的答案:
1)您可以利用可观测数据的interval函数:
getAll() {
const accessToken = 'xxxxxxxxxxx';
const batch = [{...},{...},{...},...];
const body = `access_token=${accessToken}&batch=${JSON.stringify(batch)}`;
return Observable.interval(60000).flatMap(() => {
return this.http.post('https://graph.facebook.com', body)
.retry(3)
.map(response => response.json());
});
}2)您可以在此级别利用可观测数据的fromPromise函数:
getAll() {
const batch = [{...},{...},{...},...];
return Observable.fromPromise(this.authenticationService.getAccessToken())
.flatMap(accessToken => {
const body = `access_token=${accessToken}&batch=${JSON.stringify(batch)}`;
return this.http.post('https://graph.facebook.com', body)
.retry(3)
.map(response => response.json())
});
}3)您可以利用catch操作符来处理错误:
getAll() {
const batch = [{...},{...},{...},...];
return Observable.fromPromise(this.authenticationService.getAccessToken())
.catch(() => Observable.of({})) // <-----
.flatMap(accessToken => {
const body = `access_token=${accessToken}&batch=${JSON.stringify(batch)}`;
return this.http.post('https://graph.facebook.com', body)
.retry(3)
.map(response => response.json())
});
}在这种情况下,当出现获取访问令牌的错误时,将提供一个空对象来构建POST请求。
4)是的,当然!map操作符允许你返回你想要的.
发布于 2016-03-14 04:51:51
setTimeout(() => {},60000)。error => error或error => { return error; }..map(resp => { return resp.array})。由于响应是JSON格式,所以现在必须从它获取数组并返回它。在返回之前,您可以做很多您想做的修改。随时编辑答案..。
https://stackoverflow.com/questions/35978040
复制相似问题