Можно ли использовать AbortController с запросами Fetch Post без автоматического запуска события закрытия?Javascript

Форум по Javascript
Ответить
Anonymous
 Можно ли использовать AbortController с запросами Fetch Post без автоматического запуска события закрытия?

Сообщение Anonymous »

Вопрос: Можно ли использовать 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»