如何重写这个承诺链以避免需要多个函数?
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;
}));
});
}
}
我刚开始使用 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;
}));
});
}
}