Может ли Promise.race использовать ненужную память? - PullRequest
0 голосов
/ 23 января 2019

У меня есть некоторый код, который возвращает либо результат запроса http, либо ошибку, если запрос не возвращается в течение 5 секунд:

const doRequest = () => request('http://www.google.com');
const doTimeout = () => new Promise((resolve, reject) => setTimeout(() => reject(new Error(`Request timeout)), 5000));

return Promise.race([
  doRequest,
  doTimeout,
]);

В этом случае, если запрос возвращается ниже 5секунд doTimeout продолжает работать, пока не истечет время ожидания через 5 секунд.Это хорошая идея, чтобы отменить оставшиеся Обещания?Например,

const doRequest = () => request('http://www.google.com');

let timeout;
const doTimeout = () => new Promise((resolve, reject) => {
  timeout = setTimeout(() => reject(new Error(`Request timeout)), 5000);
});

const requestPromise = doRequest();

return Promise.race([
  requestPromise,
  doTimeout,
])
.then(response => {
  clearTimeout(timeout);
  requestPromise.cancel();
  return response;
})
.catch(err => {
  clearTimeout(timeout);
  requestPromise.cancel();
  throw err;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...