首先,我编写了一个类似于Google表单的“表单生成器”,用于运行多种类型调查的公司内部,这些调查都是问题/回答格式的。DB设计在功能上非常类似于

(取自Database design for a survey)
后端是用Python编写的,使用Django和Django Rest框架,前端是角9。有些问题比Google表单允许的更复杂,例如,有些问题允许多个答案,某些答案与它们有“次要问题”相关联,其他问题依赖于某些答案(即,如果不选择某个答案,则必须禁用一些问题)
由于数据库的复杂性,而且主要是由于我普遍缺乏经验,我的前端解决方案往往能够发布到API中,对我来说似乎很麻烦。插入逻辑如下:
created
。
在我的设计中不使用Person表和应答表。
用角度编码的方法的基本思想如下:
this.createSurvey().subscribe(survey => {
this.questions.forEach(question => {
question.survey = survey
this.createQuestion(question).subscribe(newQuestion => {
// same logic with answers that belong to this question
})
)}
})这是插入逻辑的基本要点。由于我正在学习我的代码过程,在这一点上,我已经开始相信,不推荐以这种方式嵌套订阅,尽管我已经将它们提取到了防止可视化“回调地狱”的方法中。虽然功能强大,但我现在面临的问题是,在通过POST成功创建每个问题之后,如何向用户发出单个“成功保存的表单”消息,因为在使用异步调用时没有特定的序列(据我理解)。
有人能为我指出正确的方向吗?在哪里阅读或属于RXJS的操作符是否适合这些类型的任务?
发布于 2020-03-12 01:01:02
通过在这里使用switchMap链接避免回调地狱,并并行地forkJoin所有创建问题请求
this.createSurvey().pipe(switchMap(survey=>
forkJoin(this.questions.map(question => {
question.survey = survey
return this.createQuestion(question)
}))
).subscribe(e=>success action....)https://stackoverflow.com/questions/60645427
复制相似问题