У меня есть некоторый код, который возвращает либо результат запроса 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;
});