原始中的多个提取请求



对于一个项目,我必须生成一个PDF,在DB中列出车辆。为此,我使用了JSPDF库。

第一步:我从DB(通过API上的异步请求(获取数据,并在存储在Array中的服务器上获取图像。

第二步:我调用一个函数,该函数使用JSPDF生成PDF。问题是,在调用generatePDF函数之前,我需要检索所有数据,否则字段和图像是空的,因为它们还没有从DB或服务器中检索到。

我发现的一个解决方案是使用setTimeout函数在每次调用之间设置一个延迟。然而,这会使代码变得非常缓慢和不灵活,因为您必须根据要检索的数据和图像的数量手动更改超时。此外,无法准确确定检索数据所需的时间,尤其是因为这可能因网络状态而异,因此必须留出通常不必要的余量。

另一种解决方案是使用回调,或者将fetch/ajax调用与.then/.done调用交织在一起,但在检索图像时会变得非常复杂,因为图像是一个接一个地检索的,而且有一百多个。

以一种干净灵活的方式做到这一点最简单的方法是什么?谢谢你的帮助,很抱歉发了这么长的短信,我尽量说清楚:(

要按顺序执行一系列异步操作,请在上一个操作的实现处理程序中启动下一个操作。

async函数是最简单的方法:

async function buildPDF() {
const response = await fetch("/path/to/the/data");
if (!response.ok) {
throw new Error(`HTTP error ${response.status}`);
}
const data = await response.json(); // Or `.text()` or whatever
const pdf = await createPDF(data);  // Assuming it returns a promise
// ...
}

如果你不能在你的环境中使用async函数,也不想进行transfile,你可以把你的fulfullment处理程序写成回调:

function buildPDF() {
return fetch("/path/to/the/data")
.then(response => {
if (!response.ok) {
throw new Error(`HTTP error ${response.status}`);
}
return response.json(); // Or `.text()` or whatever
})
.then(data => createPDF(data))
.then(pdf => {
// ...
});
}

请注意,我将返回链的结果,以便调用方可以处理错误。

最新更新