如何重写这个承诺链以避免需要多个函数?

How to rewrite this promise chain to avoid need of multiple functions?

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

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() 的第二个 then() 中,但是当我这样做时,我无法访问我的商店,因为 this 在那里是未定义的。

我该如何解决这个问题?

使用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;
                }));
            });
    }
}