首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角2观测值

角2观测值
EN

Stack Overflow用户
提问于 2016-03-14 01:16:18
回答 2查看 1.1K关注 0票数 2

我正在开发一个应用程序来获取facebook上的一些活动,看一看:

EventComponent:

代码语言:javascript
复制
events: Object[] = [];

constructor(private eventService: EventService) {
  this.eventService.getAll()
    .subscribe(events => this.events = events)
}

EventService:

代码语言:javascript
复制
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:

代码语言:javascript
复制
getAccessToken() {
    return new Promise((resolve: (response: any) => void, reject: (error: any) => void) => {
      facebookConnectPlugin.getAccessToken(
        token => resolve(token),
        error => reject(error)
      );
    });
  }

我有几个问题:

1)如何设置间隔以每60秒更新一次事件?

2) accessToken的价值实际上来自于一个承诺,我应该这样做吗?

代码语言:javascript
复制
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请求的响应在默认情况下不会返回一个对象数组,我将不得不进行一些操作。我应该这样做吗?

代码语言:javascript
复制
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;
  })
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-14 09:37:07

以下是你的问题的答案:

1)您可以利用可观测数据的interval函数:

代码语言:javascript
复制
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函数:

代码语言:javascript
复制
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操作符来处理错误:

代码语言:javascript
复制
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操作符允许你返回你想要的.

票数 0
EN

Stack Overflow用户

发布于 2016-03-14 04:51:51

  1. 将事件放置在超时块中,并将间隔设置为60。setTimeout(() => {},60000)
  2. 使用模板字符串是完全可以的,但您正在告诉它的值来自一个承诺。如果你的整个代码块在内部,解析承诺的功能,这应该可以。因此,这取决于您的代码在哪里。以及为什么承诺.In A2我们建议使用可观察的而不是承诺。别把它们混合起来。
  3. 错误函数中没有返回任何内容。因此,如果您从该块返回错误,您将得到错误数据在错误的情况下。error => errorerror => { return error; }.
  4. 确切地说,您应该映射以获得响应并对其进行操作,然后只从该函数返回数组。.map(resp => { return resp.array})。由于响应是JSON格式,所以现在必须从它获取数组并返回它。在返回之前,您可以做很多您想做的修改。

随时编辑答案..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35978040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档