Можете ли вы иметь несколько невыполненных асинхронных запросов, которые запускаются один за другим, несмотря на результаты предыдущих запросов
еще не решены?
Да.
Или каждый последующий асинхронный запрос
как-то отменяет предыдущий запрос?
Количество
База данных, которую я бью, - это корпоративное хранилище данных - я думаю, что оно очень медленное. Есть ли предел тому, как долго асинхронный запрос может оставаться «открытым»? У браузеров истекло время ожидания?
Да, запросы будут в конечном итоге истекать. (Но я бы не предположил, что база данных в корпоративном хранилище данных «чрезвычайно медленная».)
Наконец, допустим, я отправляю асинхронные запросы № 1, № 2 и № 3 - но на них получают ответы в порядке № 2, № 3, № 1 - есть ли какие-либо последствия для этого?
С большинством API-интерфейсов (XMLHttpRequest
, fetch
и т. Д.) Вы получите обратные вызовы завершения в порядке выполнения операций, а не в порядке запускаемых операций , который действительно может иметь последствия, если ваш код не настроен для этого.
Например, этот код в jsFiddle показывает три перекрывающихся невыполненных запроса, выполняющихся в случайном порядке:
function doRequest(reqnum, reqdata) {
const delay = (1000 + Math.floor(Math.random() * 3000)) / 1000;
const json = JSON.stringify({data: reqdata});
return fetch("/echo/json/", {
method: "POST",
body: `delay=${delay}&json=${encodeURIComponent(json)}`
})
.then(res => {
if (!res.ok) {
throw new Error("HTTP status " + res.status);
}
return res.json();
})
.then(data => {
console.log(`${reqnum} complete, data = ${data.data}`);
});
}
doRequest(1, "one");
doRequest(2, "two");
doRequest(3, "three");
Живой пример