当上一个 api 成功完成后,如何对 api 进行新的调用?

我是 Angular 和 rxjs 的新手,我有以下场景,在该场景中,我需要在成功解析对 api 的调用后进行新的调用,在 Angular / rxjs 的上下文中我不知道该怎么做它


handler(): void {

  this.serviceNAme

    .createDirectory(this.path)

    .pipe(

      finalize(() => {

        this.someProperty = false;

      })

    )

    .subscribe(

      (data) => console.log(data),

      (error) => console.error(error.message)

    );

}

当上一个 api 成功调用时,重新调用 api 的正确方法是什么?


慕森卡
浏览 127回答 3
3回答

素胚勾勒不出你

我知道你有 aserviceOne和 a serviceTwo。并且您想serviceTwo使用从 检索到的数据进行调用serviceOne。使用 rxjs switchMap您可以将一个可观察值通过管道传输到另一个可观察值中。  handler(): void {        this.serviceOne            .createDirectory(this.path)            .pipe(                switchMap(serviceOneResult => {                    // transform data as you wish                    return this.serviceTwo.methodCall(serviceOneResult);                })            )            .subscribe({                next: serviceTwoResult => {                    // here we have the data returned by serviceTwo                },                error: err => {},            });    }如果您不需要从serviceOne到传递数据serviceTwo,但需要它们一起完成,则可以使用 rxjs forkJoin。  handler(): void {        forkJoin([            this.serviceOne.createDirectory(this.path),             this.serviceTwo.methodCall()        ])        .subscribe({            next: ([serviceOneResult, serviceTwoResult]) => {                // here we have data returned by both services            },            error: err => {},        });    }

翻翻过去那场雪

使用aysncandawait你可以这样做:async handler(): void {  await this.serviceNAme    .createDirectory(this.path)    .pipe(      finalize(() => {        this.someProperty = false;      })    )    .subscribe(      (data) => console.log(data),      (error) => console.error(error.message)    );   // Do second api call}

一只甜甜圈

有一些说法可以做到这一点:场景#1您的两个服务 api 调用是独立的,您只想调用一个,然后调用下一个 const serviceCall1 = this.serviceName.createDirectory(this.path); const serviceCall2 = this.serviceName.createDirectory(this.otherPath); concat(serviceCall1 , serviceCall2).subscribe({   next: console.log,   error: err => console.error(err.message),   complete: () => console.log("service call 1&2 complete") });场景#2您的两个调用相互依赖,因此您需要第一个调用的结果才能开始第二个调用 this.serviceName.getDirectoryRoot().pipe(   switchMap(root => this.serviceName.createDirectoryInRoot(root, this.path)) ).subscribe({   next: console.log,   error: err => console.error(err.message),   complete: () => console.log("service call 1 used to create service call 2, which is complete") });您将需要方案 # 2,因为这样做,第一次调用中的错误将意味着没有结果发送到switchMap,并且永远不会进行第二次调用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript