angular - Angular for 循环进行 http 调用 - 等待上一个调用完成,然后再进行下一个
问题描述
嗨,我有一个 for 循环进行这样的 http 调用:问题是每个 http 调用都在调用一个数据库存储的 proc,它正在检查索引的最大值,递增 1,然后插入到表中。for 循环开始时,对于第一个 api 调用 this.startProcess(..),点击数据库,获取表的最大值并插入,在完成之前,第二个 api 调用被触发并且数据库失去了对 tabled 最大值的跟踪出现索引和键重复错误。如何在角度解决这个问题?第二次通话如何等到第一次通话结束或其他建议?
for (let key of keys) {
this.activationService
.retrieveActivationKey(
this.siteName,
this.hardwareId
)
.subscribe({
next: (resp) => {
this.startProcess(resp.Message.Key); //before first call finish 2nd one starts and issue....
},
error: (err) => {
console.log(`err-->${err}`);
},
});
}
解决方案
你通过使用递归来做
i:number =0
serverCall() {
this.activationService.retrieveActivationKey(this.siteName, this.hardwareId)
.subscribe({
next: (resp) => {
this.i++;
this.startProcess(resp.Message.Key);
if (this.i != keys.length) {
serverCall();
}
},
error: (err) => {
console.log(`err-->${err}`);
this.i++;
if (this.i != keys.length) {
serverCall();
}
},
});
}
推荐阅读
- javascript - y轴和y轴标签d3js之间的空间
- terraform - 在 terraform 中使用嵌套变量的正确方法
- javascript - React Native - 从本地设备单击文件时如何打开我的应用程序
- qlikview - 在 qlik 意义上计算总数的百分比
- libxml2 - 如何将 libxml2 作为依赖项添加到 SwiftPM
- php - make loop 如何让数组中的值上瘾
- ethereum - abi:尝试在需要参数时解组空字符串
- asp.net - 将 USB 设备中的物理签名捕获到网页中
- css - 除了开发者模式外,如何实时编辑网站并插入 CSS 和 JS
- loops - Ansible 循环遍历以 count 为键的 dicts 列表