Вопрос: Можно ли использовать AbortController с запросами POST без немедленного запуска события закрытия на сервере? Если нет, существует ли более подходящий инструмент/метод для отмены запросов на публикацию?
Справочная информация: AbortController работает, как и ожидалось, с запросами GET, но при использовании с запросами POST он немедленно запускает req.on('close', handleClose) в моем экспресс-маршруте, даже если клиент не прервал запрос.
Код: В упрощенном коде ниже, если клиент нажимает клавишу Escape, Запрос на получение данных прерван. Сервер имеет встроенную 10-секундную задержку.
Express Server:
import express from 'express';
import bodyParser from 'body-parser';
const router = express.Router();
const jsonParser = bodyParser.json();
router.post('/test', jsonParser, async (req, res) => {
req.on('close', handleClose);
await delay();
return res.send();
function handleClose() {
console.log('signal aborted');
}
function delay() {
return new Promise(function(resolve) {
setTimeout(() => {
resolve();
}, 10000);
});
}
});
JS в клиенте:
const button = document.getElementById('button');
button.addEventListener('click', press_button);
async function press_button() {
const controller = new AbortController();
addListeners_keyUp();
const postBody = {
'one': 1
};
const response = await fetch('/test', {
body: JSON.stringify(postBody),
headers: { 'Content-Type': 'application/json' },
method: 'post',
signal: controller.signal
});
console.log('the end');
function abort_fetch() {
controller.abort();
}
function addListeners_keyUp() {
document.addEventListener('keyup', process_keyUp);
}
function check_abortEvent(event) {
return event.key === 'Escape' ? true : false;
}
function process_keyUp(event) {
const abortEvent = check_abortEvent(event);
if (abortEvent) {
abort_fetch();
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... ally-trigg
Можно ли использовать AbortController с запросами Fetch Post без автоматического запуска события закрытия? ⇐ Javascript
Форум по Javascript
1765763002
Anonymous
[b]Вопрос:[/b] Можно ли использовать AbortController с запросами POST без немедленного запуска события закрытия на сервере? Если нет, существует ли более подходящий инструмент/метод для отмены запросов на публикацию?
[b]Справочная информация:[/b] AbortController работает, как и ожидалось, с запросами GET, но при использовании с запросами POST он немедленно запускает req.on('close', handleClose) в моем экспресс-маршруте, даже если клиент не прервал запрос.
[b]Код:[/b] В упрощенном коде ниже, если клиент нажимает клавишу Escape, Запрос на получение данных прерван. Сервер имеет встроенную 10-секундную задержку.
[b]Express Server:[/b]
import express from 'express';
import bodyParser from 'body-parser';
const router = express.Router();
const jsonParser = bodyParser.json();
router.post('/test', jsonParser, async (req, res) => {
req.on('close', handleClose);
await delay();
return res.send();
function handleClose() {
console.log('signal aborted');
}
function delay() {
return new Promise(function(resolve) {
setTimeout(() => {
resolve();
}, 10000);
});
}
});
[b]JS в клиенте:[/b]
const button = document.getElementById('button');
button.addEventListener('click', press_button);
async function press_button() {
const controller = new AbortController();
addListeners_keyUp();
const postBody = {
'one': 1
};
const response = await fetch('/test', {
body: JSON.stringify(postBody),
headers: { 'Content-Type': 'application/json' },
method: 'post',
signal: controller.signal
});
console.log('the end');
function abort_fetch() {
controller.abort();
}
function addListeners_keyUp() {
document.addEventListener('keyup', process_keyUp);
}
function check_abortEvent(event) {
return event.key === 'Escape' ? true : false;
}
function process_keyUp(event) {
const abortEvent = check_abortEvent(event);
if (abortEvent) {
abort_fetch();
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79847336/can-abortcontroller-be-used-with-fetch-post-requests-without-automatically-trigg[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия