Fix some races due to promises completing after we've switched rooms

Add a few isMounted() checks to promise handlers so that we don't end up
throwing NPEs.
This commit is contained in:
Richard van der Hoff 2016-01-08 12:03:45 +00:00
parent 8170288acb
commit 62cf34b58c
2 changed files with 18 additions and 5 deletions

View file

@ -353,11 +353,14 @@ module.exports = React.createClass({
_paginateCompleted: function() {
debuglog("paginate complete");
this.setState({
room: MatrixClientPeg.get().getRoom(this.props.roomId)
});
// we might have switched rooms since the paginate started - just bin
// the results if so.
if (!this.isMounted()) return;
this.setState({paginating: false});
this.setState({
room: MatrixClientPeg.get().getRoom(this.props.roomId),
paginating: false,
});
},
onSearchResultsFillRequest: function(backwards) {
@ -535,7 +538,7 @@ module.exports = React.createClass({
return searchPromise.then(function(results) {
debuglog("search complete");
if (!self.state.searching || self.searchId != localSearchId) {
if (!this.isMounted() || !self.state.searching || self.searchId != localSearchId) {
console.error("Discarding stale search results");
return;
}