gpt4 book ai didi

javascript - rxjs 相当于使用 'return' 停止异步函数;

转载 作者:搜寻专家 更新时间:2023-10-30 21:06:14 25 4
gpt4 key购买 nike

我想实现类似下面的东西(如果使用 promises 就很容易)

async doSomething(sID){
let student = await service.getStudent(sID);
let teacher = await service.getTeacher(student.TeacherID);
if(!teacher.Active){
return;
}

await service.teacherSomething(teacher);
await service.studentSomething(student);
}

如果我使用 observables 而不是 promises,我不知道如何做到这一点,但这是我到目前为止尝试过的方法

doSomething(sID){
let student;
let teacher;
service.getStudent(sID).pipe(
switchMap(studentR=>{
student = studentR;
return service.getTeacher(student.TeacherID);
}),
switchMap(teacherR=>{
teacher = teacherR;
if(!teacher.Active){
return of(null);
}else{
return service.teacherSomething(teacher);
}
}),
swicthMap(teacherSomethingResponse=>{
if(teacherSomethingResponse==null){
return of(null);
}else{
return service.studentSomething(student);
}
})
}).subscribe();

}

如您所见,与 promise 版本相比,我的 rxjs 版本似乎太长了,而且我觉得我的做法不正确。

最佳答案

这是将当前代码转换为 Rx 样式的方法。如果条件不满足,takeWhile 将完成您的可观察

function doSomething(sID) {
return from(service.getStudent(sID)).pipe(
switchMap(student =>
service.getTeacher(student.TeacherID).pipe(
takeWhile(teacher => teacher.Active),
switchMap(teacher => service.teacherSomething(teacher).pipe(takeWhile(res => res))),
switchMap(() => service.studentSomething(student))
)
))
}

关于javascript - rxjs 相当于使用 'return' 停止异步函数;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54183210/

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