按顺序加载 API 个请求 (JavaScript)
Loading API requests in order (JavaScript)
我正在编写的脚本在 for 循环中进行了几次 API 调用。问题是某些 API 调用比其他调用需要更长的时间来加载,因此页面上的信息加载顺序不正确。
例如,我将对对象 1-8 进行 API 调用,但它们将按以下顺序加载:4、3、1、2、7、5、6、8
代码基本如下:
function loadData() {
for (var i = 0; i < 8; i++) {
$.getJSON("http://theapi.com/data" + i, function(data) {
var div = "<div>" + data + "</div>";
browserElement.innerHTML += div;
});
}
}
如何强制 JavaScript 在第一个调用完成之前不加载第二个 API 调用?
编辑: 使用 "promises" 链接 API 调用导致脚本等待显示数据,直到加载所有数据。这不是一个理想的结果,因为如果有足够的数据,用户可能需要等待几秒钟才能看到任何东西。
在循环中创建所有 div,然后在数据可用时填充数据
function loadData() {
for (var i = 0; i < 8; i++) {
let div = document.createElement("div");
browserElement.innerHTML += div;
$.getJSON("http://theapi.com/data" + i, function(data) {
div.innerHTML = data;
});
}
}
$.getJSON
returns 一个 Promise,然后您可以 await
停止执行并获得结果:
async function loadData() {
for (let i = 0; i < 8; i++) {
const data = await $.getJSON("http://theapi.com/data" + i);
const div = "<div>" + data + "</div>";
browserElement.innerHTML += div;
}
}
要从您的连接中挤出全部带宽,您可以运行并行请求,然后一次显示所有 div:
async function loadData() {
const promises = [];
for (let i = 0; i < 8; i++) {
promises.push($.getJSON("http://theapi.com/data" + i));
const result = await Promise.all(promises);
for(const data of result) {
const div = "<div>" + data + "</div>";
browserElement.innerHTML += div;
}
}
Read on
我正在编写的脚本在 for 循环中进行了几次 API 调用。问题是某些 API 调用比其他调用需要更长的时间来加载,因此页面上的信息加载顺序不正确。
例如,我将对对象 1-8 进行 API 调用,但它们将按以下顺序加载:4、3、1、2、7、5、6、8
代码基本如下:
function loadData() {
for (var i = 0; i < 8; i++) {
$.getJSON("http://theapi.com/data" + i, function(data) {
var div = "<div>" + data + "</div>";
browserElement.innerHTML += div;
});
}
}
如何强制 JavaScript 在第一个调用完成之前不加载第二个 API 调用?
编辑: 使用 "promises" 链接 API 调用导致脚本等待显示数据,直到加载所有数据。这不是一个理想的结果,因为如果有足够的数据,用户可能需要等待几秒钟才能看到任何东西。
在循环中创建所有 div,然后在数据可用时填充数据
function loadData() {
for (var i = 0; i < 8; i++) {
let div = document.createElement("div");
browserElement.innerHTML += div;
$.getJSON("http://theapi.com/data" + i, function(data) {
div.innerHTML = data;
});
}
}
$.getJSON
returns 一个 Promise,然后您可以 await
停止执行并获得结果:
async function loadData() {
for (let i = 0; i < 8; i++) {
const data = await $.getJSON("http://theapi.com/data" + i);
const div = "<div>" + data + "</div>";
browserElement.innerHTML += div;
}
}
要从您的连接中挤出全部带宽,您可以运行并行请求,然后一次显示所有 div:
async function loadData() {
const promises = [];
for (let i = 0; i < 8; i++) {
promises.push($.getJSON("http://theapi.com/data" + i));
const result = await Promise.all(promises);
for(const data of result) {
const div = "<div>" + data + "</div>";
browserElement.innerHTML += div;
}
}
Read on