Я видел этот другой ответ: https://stackoverflow.com/a/47250621/2809729
Итак, могу ли я прервать множественный запрос на выборку, используя только один сигнал?
Я видел этот другой ответ: https://stackoverflow.com/a/47250621/2809729
Итак, могу ли я прервать множественный запрос на выборку, используя только один сигнал?
На момент написания вопроса я уже нашел решение в этом сообщение о том, как прервать выборку от одного из пионеров, которые работали над реализацией прерывания.
Так что да, вы можете :) Вот краткий пример:
async function fetchStory({ signal }={}) {
const storyResponse = await fetch('/story.json', { signal });
const data = await storyResponse.json();
const chapterFetches = data.chapterUrls.map(async url => {
const response = await fetch(url, { signal });
return response.text();
});
return Promise.all(chapterFetches);
}
В приведенном выше примере один и тот же сигнал используется для начальной выборки и для параллельной выборки глав. Вот как можно использовать fetchStory:
const controller = new AbortController();
const signal = controller.signal;
fetchStory({ signal }).then(chapters => {
console.log(chapters);
});
В этом случае вызов controller.abort() отклонит обещание о незавершенных выборках.
Я абстрагировался от решения этой проблемы и придумал «fetch-tx», транзакцию выборки, которая предоставляет единую функцию прерывания для всех связанных операций выборки.
вы можете найти его здесь: fetch-tx