bounty还有5天到期。回答此问题可获得+50声望奖励。Bhrungarajni正在寻找规范答案。
我使用的是angular15,这里我需要生成唯一的id,所以当我在相应的服务文件中添加一组代码时,这个过程运行得很好,但是由于这组代码在所有服务分支中使用,我在共享服务下创建了一个方法,并试图获取该数据,但我得到的是未定义的。
shared.service.ts:
public generateUniqueId() {
return uuid();
}
generateCorrelationId(routerEvent:any,route:string):any {
let previousUrl:any =[];
let uniqueCorrelationId = '';
routerEvent.events
.pipe(filter(event => event instanceof NavigationEnd))
.subscribe(({urlAfterRedirects}: NavigationEnd) => {
previousUrl.splice(0,previousUrl.length-1)
previousUrl = [...previousUrl, urlAfterRedirects];
if(previousUrl.length === 1 && previousUrl[0]=== route) {
return uniqueCorrelationId = this.generateUniqueId();
} else if(previousUrl.length == 2 && previousUrl[1] === previousUrl[0]) {
return uniqueCorrelationId
} else if(previousUrl.length == 2 && previousUrl[1] != previousUrl[0]) {
return uniqueCorrelationId = this.generateUniqueId();
} else {
return uniqueCorrelationId;
}
});
}
component.service.ts:
constructor(private geneateUUid:GenerateUniqueIdService) {
let uniqueIdGeneration = this.geneateUUid.generateCorrelationId(this.router,'/findprofile');
console.log(uniqueIdGeneration,"uniqueIdGeneration")
}
观察结果:在控制台中,第一个组件控制台值出现,共享服务下的下一个相应控制台出现。同样在这里,基于特定的组件服务命中,我正在检查新密钥的生成或保留它,是否可以动态地这样做,我的意思是作为一个共同的检查,以前和当前的路由是否匹配。
1条答案
按热度按时间lb3vh1jj1#
就我个人而言,我会使用
await
来使代码更具可读性。试试这个:
在转换后的代码中,generateCorrelationId函数返回解析为唯一相关ID的Promise。该函数使用first()运算符等待第一个NavigationEnd事件,然后使用resolved事件获取urlAfterRedirects属性。
previousUrl数组的splice和push方法被替换为使用spread运算符的赋值。最后,该函数返回基于当前和以前的URL生成的唯一相关ID。