gpt4 book ai didi

javascript - 迭代 observable.forkJoin 以处理多个数据库的 crud (API)

转载 作者:行者123 更新时间:2023-11-30 20:23:33 25 4
gpt4 key购买 nike

我需要在我的主数据库中插入用户信息,一旦插入(成功),我必须在多个数据库中插入类似的信息数据库(API)。我正在为我的主数据库使用 Observable.forkJoin(),因为在多个表中有多个插入。

以下是我的代码:

save(){
Observable.forkJoin([
this.userService.saveUser(this.username),
this.userService.saveRoles(this.username, this.roles),
this.userService.saveGroups(this.username, this.groups)
]).subscribe(data=>{
if(data.length == 3){
this.saveInMultipleDatabases();
}
},
err => console.error("error while adding user ",err)
);
}

saveInMultipleDatabases(){
for(let i=0;i<this.allDatabases;i++){
Observable.forkJoin([
this.userService.saveUser(this.username),
this.userService.saveRoles(this.username, this.roles),
this.userService.saveGroups(this.username, this.groups)
]).subscribe(data=>{
console.log(data);
},
err => console.error("error while adding user ",err)
);
}
}

现在我有几个问题

  • observable.forkJoin() 是在多个表中插入数据的更好方法吗。
  • 在主数据库中插入后,在其 subscribe() 函数中使用 observation.forkJoin 并对其进行迭代是否更好?像我在这里做的那样实现在多个数据库中的插入。
  • 迭代 observable 或 promises 来处理所有数据库的请求/响应是否更好。
  • 我也必须为用户更新/删除场景实现类似的方法,所以我想知道这是否是更好的实现方法。

如有任何帮助,我们将不胜感激。

更新

我在 Angular 服务中的主数据库的插入代码:

saveUser(username){     
return window.appnamespace.DBAPI.insertUser(username);
}

saveRoles(username, roles){
let promise;
roles.forEach(role => {
promise = window.appnamespace.DBAPI.insertRoles(role, username);
});
return promise;
}

saveGroups(username, groups){
let promise;
groups.forEach(grp => {
promise = window.appnamespace.DBAPI.insertGroups(grp.value, username);
});
return promise;
}

最佳答案

我认为重要的问题是什么需要同时发生。根据您的描述,您似乎想等到所有记录都存储在主数据库中。只有在那之后,您才想将数据存储在其他数据库中,并且您可能不关心以什么顺序。

所以使用 Observable.forkJoin() 很好我只是将它与 concatMapmergeMap 链接起来,具体取决于你想做什么.然后我猜所有内部 Observable 都可以合并。

Observable.forkJoin([obs1, obs2, obs3])
.concatMap(responses => {
const observables = [];
for (let i=0; i<this.allDatabases; i++) {
observables.push(saveUser(...), saveRoles(...), ...);
}
return Observable.merge(Observable.from(responses), ...observables);
})
.subscribe({
next: response => console.log(response),
error: err => console.log(`It's broken`, err),
complete: () => console.log('All done'),
});

当然,这在很大程度上取决于您想做什么,但我希望您能明白这一点。

关于javascript - 迭代 observable.forkJoin 以处理多个数据库的 crud (API),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51192665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com