我当前有一个按钮,当单击该按钮时,我要调用服务:
saveAssignment(formValues) {
if (this.rulesService.validate(3, 1)) {
// continue to save
console.log('trigger save');
this.assignmentService.saveAssignment(formValues).subscribe((data) => {
console.log('saved!');
});
} else {
alert('came in here instead');
}
}
规则服务:
validate(actionId: number, referenceId: number): boolean {
let hasErrors = false;
let result: any;
this.validateRulesAPI(3, 1).subscribe((data) => {
// some logic here will set hasErrors property to true/false
});
return hasErrors;
}
ruleService我想让它返回布尔值,无论它是否验证了参数,这样我就可以重用它,问题是在调用完成之前代码返回时命令已关闭,这是另一种安排方式这样,让他们互相等待?所以rulesService.validate将等待布尔返回,然后如果返回true,则继续调用saveAssignments?否则,我会看到警报(“来这里”),然后再运行验证代码。
答案 0 :(得分:2)
您可以使用switchMap
的{{1}}可管道运算符来订阅内部可观察项。
为进行验证,您可以返回一个rxjs
并相应地映射到Observable
:
boolean
然后以validate(actionId: number, referenceId: number): Observable<boolean> {
return this.validateRulesAPI(actionId, referenceId).pipe(map(data) => {
// Do the stuff and check for errors
// if has error then ------------> return false
// if does not have error then ---> return true
});
}
方法使用saveAssignment
switchMap
希望这会有所帮助。
答案 1 :(得分:0)
您正在执行异步验证。与同步同步稍有不同。
Angular form validation tutorial中说明了如何处理这种验证,这将使您可以让Angular处理预订。