Я строю приложение, чтобы получить некоторые события из Facebook, посмотрите:Угловое 2 Наблюдаемые
EventComponent:
events: Object[] = [];
constructor(private eventService: EventService) {
this.eventService.getAll()
.subscribe(events => this.events = events)
}
Организация мероприятий:
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) Ответ от запроса на отправку не вернет массив объектов по умолчанию, мне придется сделать некоторые манипуляции. Должен ли я делать что-то подобное?
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;
})
По какой-то причине я не мог заставить 'fromPromise' работать. Поэтому для упрощения я попытался подписаться только на 'accessToken', но не работал. Я помещаю это внутри моего конструктора компонентов: 'Observable.fromPromise (this.authenticationService.getAccessToken()). Subscribe (response => this.response = response, error => this.response = error);'. Я также обновил свой ответ методом 'getAccessToken()'. –
Я видел, что вы используете плагин facebook. Ваша проблема связана с обнаружением изменений. Я имею в виду, что данные не обновляются в вашем представлении ... Является ли flatMap сразу после вызова fromPromise? –
Да, у меня есть приложение [Ionic 2] (http://ionicframework.com/docs/v2/), использующее [cordova-plugin-facebook4] (https://github.com/jeduan/cordova-plugin-facebook4) , Поскольку я не мог заставить ваш код работать, я сначала пытаюсь получить «accessToken» на основе вашего ответа с помощью наблюдаемых и показать его на мой взгляд, после того, как мне это удастся, я перейду к сообщению. Я не использую flatMap() здесь. Когда я пытаюсь получить доступ к странице, она не загружается. Я создал [jsfiddle] (https://jsfiddle.net/t91encqt/4/) с соответствующей частью кода, возможно, это поможет вам понять мою проблему. –