Библиотека асинхронных запросов для react?
Да, такая библиотека есть. Проблема в том, что в JS нативные промисы (Promise) нельзя отменить (not cancelable)... но при этом - у нас есть генераторы, которые вполне себе позволяют имитировать отмену выполнения какой-либо функции, скажем, в середине.
Для того, чтобы все заработало - вам нужно использовать связку из любой понравившейся библиотеки для непосредственно запросов (я предпочитаю isomorphic-fetch), затем взять redux и middleware для него (редакса) - redux-saga.
Если вы не знакомы с экосистемой редакса или первый раз слышите про redux-saga - прочтите документацию, посмотрите уроки. Если вкратце - библиотека построена на генераторах. Функция-генератор возвращает итератор и ее выполнение прекращается каждый раз, когда мы возвращаем итератору новое значение (yield)Ниже продемонстрирую как это примерно работает:function* myCancelableAction(someData) {
  // вернет итератору промис и приостановит работу функции до следующего вызова next
  // в нашем случае - функция продолжит выполнение, когда придет ответ сервера
  const response = yield doAjaxRequest(someData) 
  yield dispatchSuccessAction(response)
}

const action = myCancelableAction();
const promise = action.next().value // fetch promise

promise.then(response => {
  // если новых запросов не поступило
  if(!newRequestIsComing) {
    // мы можем передать значение в нашу функцию (через next)
    console.log(action.next(response).value); // dispatched action
  }
})
Таким образом, после того, как функция вернула значение первый раз, применительно к теме поста это будет "сделай AJAX-запрос", мы можем не выполнять ее дальше (если захотим). Отменить ajax запрос в этом случае не получится, но мы можем просто не учитывать его результаты (не диспатчить success-экшен, например).UPD1 обновил пример кода
Ну так это издержки асинхронности, за которые так любят, и так ненавидят JS.
Думаю для того же React или Angular это все изрежки программиста, писавшего код. По большому счету нельзя блокировать что-то на время выполнения асинхрона. Например вы сделали запрос данных и на это время через state (я про React) заблокировали кнопку ... А потом ваш AJAX взял и не вернулся (ну магия какая-то). И абзац - жми F5.
И кстати, может если сервер так долго отдаёт данные, то ... Хм пусть отдает все сразу, а фильтрует пусть фронтэнд. Попробуйте, может это ваше решение.