首页 > 解决方案 > 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}`);                                          
                                    },
                                });
                        }

标签: angularapiloopshttpfor-loop

解决方案


你通过使用递归来做

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();
                        }
                    },
                });
       }

推荐阅读