React Js ALT - 另一个

时间:2017-04-03 08:30:40

标签: mongodb reactjs mongoose alt

在下面的Alt操作代码中,如何在addCharacter成功后调用getCharacters()?基本上我是在将新记录保存到数据库后尝试刷新字符列表。

getCharacters() {
    requestPromise('http://localhost:3100/api/characters')
      .then((res) => {
        console.log("Getting Characters");
        var opdata = JSON.parse(res);
        this.actions.getCharactersSuccess(opdata.characters);
      }).catch((err) => {
        console.log('error:', err);
        this.actions.getCharactersFail(err)
      })
  }

  addCharacter(data) {
    var options = {
      method: 'POST',
      uri: 'http://localhost:3100/api/characters/add/',
      json: true,
      body: {
        name: data.charName,
        allegiance: data.charAllegiance,
      },
    };
    requestPromise(options)
      .then((res) => {
          // How can I recall getCharacters() from here
      }).catch((err) => {
        console.log('error:', err);
      })
  }

商品

getCharactersSuccess(res) {
    this.setState({
      characters: res
    })
  }

2 个答案:

答案 0 :(得分:0)

您只需要调用getCharacters函数即可。您可以通过this.getCharacters()

执行此操作
addCharacter(data) {
    var options = {
      method: 'POST',
      uri: 'http://localhost:3100/api/characters/add/',
      json: true,
      body: {
        name: data.charName,
        allegiance: data.charAllegiance,
      },
    };
    requestPromise(options)
      .then((res) => {
         return this.getCharacters();
      }).catch((err) => {
        console.log('error:', err);
      })
  }

答案 1 :(得分:0)

这看起来不对。如果你使用像flux或redux这样的架构会更好。你可以采取任何方式购买只需拨打return this.getCharacters();。其中引用了类中的getCharacters()函数。您错过的关键点是返回此。,它选择了正确的引用。当您在promise范围内创建promise时,会发生错误,但您不会从该Promise范围返回任何内容。因此返回将解决您的问题。

addCharacter(data) {
    var options = {
      method: 'POST',
      uri: 'http://localhost:3100/api/characters/add/',
      json: true,
      body: {
        name: data.charName,
        allegiance: data.charAllegiance,
      },
    };
    requestPromise(options)
      .then((res) => {
         return this.getCharacters();
      }).catch((err) => {
        console.log('error:', err);
      })
  }