如何重写此承诺链以避免需要多个功能?

时间:2017-06-07 14:30:09

标签: javascript node.js fetch es6-promise mobx

我刚开始使用mobx并做出反应(这是一个伟大的团队,顺便说一句。)我的商店有点问题。我想异步从现有API获取一些数据,然后使用这些数据来更新我的商店中的一些现有的observable:

class StationStore {

  @observable stations = []

  loadStations() {
    fetch('http://localhost:3000/api/station/getStations')
    .then(function(response) { return response.json() })
    .then(stations=>this.parseStations(stations));
  }

  @action parseStations(stations) {
    var newStations = stations.map((station)=>{
      let s = new Station;
      s.id=station.id;
      s.name=station.Text;
      s.deviceType=station.DeviceType;
      return s;
    });
    this.stations.replace(newStations);
  }
}

如您所见,我需要将逻辑划分为两个独立的函数,以便能够访问this.stations。我试图包含地图并将部分替换为loadStations()的第二个然后(),但是当我这样做时,我无法访问我的商店,因为 this 在那里是不确定的。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

使用var self = this;可以解决您的问题

class StationStore {
    @observable stations = [];

    loadStations() {
        var self = this;
        fetch('http://localhost:3000/api/station/getStations')
            .then(function (response) {
                return response.json()
            })
            .then(stations => {
                self.stations.replace(stations.map((station) => {
                    let s = new Station;
                    s.id = station.id;
                    s.name = station.Text;
                    s.deviceType = station.DeviceType;
                    return s;
                }));
            });
    }
}