想象一个网格。当用户填写A1单元格并按Enter进入A2时,将向后端发出请求以在数据库中查找内容,然后将查找结果返回至前端以填充A行的其余部分- -同时,我希望用户能够继续输入A2,A3等。
所以问题是:
谢谢
答案 0 :(得分:2)
按顺序回答您的问题:
是的,您绝对可以同时拥有多个HTTP requests
。考虑网页的示例。当您打开任何网页时,多个请求将发送到多个位置。解决这些问题后,在其上定义的callback methods
会不断填充网页上的数据。
是的,当然可以。一段时间后,该请求将timeout
。每个浏览器都有一个default timeout duration
,它将为此打开请求。达到该超时时间后,它将取消请求。
解决顺序无关紧要。您将使用基于callback
的方法来读取HTTP response
。每个回调方法将特定于该HTTP request
,并应自行处理。
答案 1 :(得分:2)
您是否可以有多个未完成的异步请求,这些请求又一次触发,即使先前请求的结果 还没有解决?
是的
还是每个随后的异步请求 以某种方式取消了先前的请求?
否。
我要访问的数据库是公司数据仓库-我认为它的运行速度非常慢。异步请求可以保持“打开”状态有多长时间?浏览器会超时吗?
是的,请求最终将超时。 (但我不认为公司数据仓库中的数据库“非常慢”。)
最后,可以说我正在发送异步请求#1,#2和#3-但它们以#2,#3,#1的顺序得到了答复-对此有任何影响吗? / p>
使用大多数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");
答案 2 :(得分:0)
是的,您可能有多个未完成的异步请求。 JavaScript并不是真正暗示的单线程。使用睡眠功能时很常见。
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
继续,尝试睡眠功能,并在第一个请求解决之前多次调用它。确保您的功能是异步的。
请注意宿醉错误。多次调用一个函数不会拒绝先前的请求。可以在此处的工作示例中看到:https://codepen.io/anon/pen/Jmpcq/?editors=101
超时最终会发生。