为什么我的承诺解决和topicFilter更新?

时间:2017-02-13 15:28:01

标签: javascript reactjs react-native promise redux

这些是createPost屏幕中的方法。

每个post最多可与topics关联selectedTopics

主要Feed可以按主题过滤帖子:topicFilter

当用户创建帖子时,我想检查其中一个用户selectedTopics中是否有interests。如果是,则topicFilter将设置为My Top Interests

hotnew Feed都会使用此topicFilter进行刷新,然后应用会从createPost屏幕导航到feed屏幕。< / p>

但是,如果帖子的selectedTopics都不在用户中,那么interests,然后topicFilter将设置为selectedTopics中的第一个主题。与其他情况一样,Feed会刷新,应用会导航到feed屏幕。

这不起作用。

以下是createPost方法:

createPost() {
    const { text, image, mongoId, selectedTopics, topicCount } = this.props;
    const postToUniOnly = this.state.postToUniOnly;
    if (topicCount > 0) {
      if (image) {
        this.props.createPostWithImage(text, image, postToUniOnly, mongoId, selectedTopics);
      } else {
        this.props.createPostNoImage(text, postToUniOnly, mongoId, selectedTopics);
      }
      const myInterestsPostTopicMatch = this.seeIfAnyPostTopicsInMyInterests();

      if (myInterestsPostTopicMatch)
        this.ChangeTopicFilterToMyInterestsAndNavigate()
          .then(() => this.refreshFeed())
          .catch(err => console.log(err));

      else
        this.ChangeTopicFilterToOtherAndNavigate()
          .then(() => this.refreshFeed())
          .catch(err => console.log(err));
    }
  }

这会检查用户中是否有selectedTopics的任何内容。 interests

  seeIfAnyPostTopicsInMyInterests() {
    const { selectedTopics, interests } = this.props;

    return interests.some((interest) => selectedTopics.indexOf(interest) >= 0);
  }

这些是每个人的承诺:

 ChangeTopicFilterToMyInterestsAndNavigate() {
    const { topicFilter } = this.props;

    return new Promise((resolve, reject) => {
      this.props.toggleTopicFilter('My Top Interests');
      this.props.navigator.pop(2);

      if (topicFilter === 'My Top Interests') resolve();
      else reject('could not switch to my interests');
    });
  }

  ChangeTopicFilterToOtherAndNavigate() {
    const { selectedTopics, topicFilter } = this.props;

    return new Promise((resolve, reject) => {
      this.props.toggleTopicFilter(selectedTopics[0]);
      this.props.navigator.pop(2);

      if (topicFilter === selectedTopics[0]) resolve();
      else reject('could not switch to other topicFilter');
    });
  }

这是refreshFeed

  refreshFeed() {
    const { uniOnly, topicFilter } = this.props;
    this.props.fetchPostsByHottest(topicFilter, uniOnly);
    this.props.fetchPostsByNewest(topicFilter, uniOnly);
  }

现在topicFilter确实得到了适当的改变。但它在刷新Feed之前没有这样做。

它还导航到Feed。但是这两个承诺都被拒绝,记录错误,而不是refresh Feed。

我该怎么做才能解决这个问题?谢谢

0 个答案:

没有答案