设置多级和依赖可观察量



我正在尝试为一个角度应用程序实现一个解决方案,该解决方案返回多级过程的状态并处理发生的结果或错误。我想使用两个单独的通道来显示成功和不正确的输出,而不是使用公共对象来显示状态和可能的错误。
选择的方法是 Observable.throw 功能(链接)。该方法应按如下方式调用:

myFunction(result).subscribe((status: boolean) => {
console.log(data);          
}, err => this.errorSub.next( err));
}

如果该过程正确完成,则调用第一个方法;如果发生错误,则调用带有错误的第二个函数。

return this.service.createAndGetEntity(result.data.order)
.map((response: EntityResponse<OrderModel>) => {
if (result.data.unknownLocation) {
if (result.data.isRedundant) {
this.secondService.createWithRedundancy(someData).subscribe(() => {
this.dispatchSuccessAction(newOrder);
return true;
}, (err) => {
this.dispatchErrorAction(err);
throw Observable.throw(err);
});
}
else {
this.secondService.createEntity(someData).subscribe(() => {
this.dispatchSuccessAction(newOrder);
return true;
}, (err) => {
this.dispatchErrorAction(err);
throw Observable.throw(err);
});
}
}
else {
this.dispatchSuccessAction(newOrder);
// also return true here
}
});

现在解决我的问题:为了使过程正常运行,需要相互依赖的订阅,这些订阅根据上一步的结果一个接一个地执行。该方法应该在最后返回一个可观察量,但我的 snatz 不起作用。因此,我的问题:我如何构建不同的调用,以便在最后运行正确的顺序并返回 true 或抛出带有相应错误文本的错误?

您可以使用mergeMap运算符获得所需的结果。

import { mergeMap, map } from 'rxjs/operators';
createAndGetAntity(result) {
return this.service.createAndGetEntity(result.data.order).pipe(
mergeMap((response: EntityResponse<OrderModel>) => {
if (result.data.unknownLocation) {
if (result.data.isRedundant) {
return this.secondService.createWithRedundancy(someData);
} else {
return this.secondService.createEntity(someData);
}
}
return of(true);
}),
map(() => true),
);
}

我将在订阅块中处理调度成功和错误操作,而不是在服务方法本身中。

this.service.dispatchErrorAction(result).subscribe(
(order) => this.dispatchSuccessAction(order), 
(err) => this.dispatchErrorAction(err)
)

最新更新