javascript - 在 Angular 4 中从先前的 http 响应成功调用 http 请求(避免回调 hell )

标签 javascript angular callback

我正在使用一个应用程序,我需要调用一个 HTTP 响应来响应 HTTP 调用的成功。我应该如何重构我的代码以避免回调 hell

我当前的代码是:

Component.ts
SomeFunction() {
    const param2 = {ind_1: value_1, ind_2: value_2};
    this.service.callFunction1(param)
        .subscribe(
        f1_res => {
           if (f1_res.status === 'success' ) {
               this.service.callFunction2(f1_res)
                    .subscribe(
                        f2_res => {
                            this.service.callFunction3(f2_res)
                                .subscribe(
                                     f3_res => console.log('done', f3_res),
                                     f3_err => console.log(err)
                                 );
                        },
                        f2_err => console.log(f2_err)
                    )
           }
        },
        f1_err => console.log(err)
    );

}

我的服务是非常标准的 Angular 服务

Service.ts
callFunction1(param) {
     return this.http.post<any>( 'someurl.com', param );
}

callFunction2(param) {
     return this.http.post<any>( 'someurl.com', param );
}

callFunction3(param) {
     return this.http.post<any>( 'someurl.com', param );
}

我知道这很糟糕,但我该如何重构它?

最佳答案

这是 mergeMap 链的一个简单案例。像这样:

this.service.callFunction1(params).pipe(
  mergeMap(res => this.service.callFunction2(res)),
  mergeMap(res => this.service.callFunction3(res)),
)
  .subscribe(
    (result) => console.log('done', result),
    (error) => console.log('error in chain', error),
  );

这是一个有效的 Stackblitz .

编辑:当然,您可以将那些 response.status === 'success' 检查包装在一个函数中,或者就在那里,但如果您只是检查对于 HTTP 错误,它们都会简单地破坏底部错误处理程序中的链。

关于javascript - 在 Angular 4 中从先前的 http 响应成功调用 http 请求(避免回调 hell ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53053423/

相关文章:

javascript - 无法从 IE 8 中的列表框中获取选定的值

javascript - 错误类型错误 : "jit_nodeValue_3(...).toggle is not a function"

javascript - Array.prototype.map() 之后的下一个函数可以安全地假设映射中的所有回调都已返回吗?

javascript - JQuery对象通过ajax向PHP发送邮件()

javascript - 在用于 html 控件的 javascript 中选择索引更改事件

javascript - 在 Ext JS 中运行时更改组合框的外观

Angular 2 :Checkbox with *ngFor in a table

Angular : Relative navigation on a named router outlet

javascript - JS - console.log(..) 在 for 循环内的回调函数之后输出

javascript - Node.js:回调中的变量范围问题