angular - 在 Angular 9 中使可观察的调用同步

标签 angular rxjs observable angular8 angular9

我正在使用 observable 进行 HTTP 请求,我想将其作为同步调用,因为我对 rxjs 很陌生。下面的代码用于执行多个调用,因此在完成所有调用后,我只需调用驱动方法。我引用了很多链接,但我无法理解,请帮助我。

ServicecallApi:

public createHttpRequests(
    method: string,
    url: string,
    payload?: any,
    params?: any,
 
  ): Observable<any> {
    switch ((method).toLowerCase()) {
      case 'get': return this.createHttpGet(url, params);
      case 'post': return this.createHttpPost(url, payload);
      default: return this.http.get('');
    }
  }

我的服务电话如下:

  public ngOnInit(): void {


this.serviceCall.createHttpRequests('get', this.someService.getUserList, {}, {}).pipe(
  map((result: Iuserlist) => {
    if (result.body.statusCode ===  200) {
    
    } else {
   
    }
  }),
).subscribe();
this.serviceCall.createHttpRequests('get', this.someService.getsomeData, {}, {}).pipe(
  map((result: Isomedatas) => {
    if (result.body.statusCode ===  200) {
    
    } else {
   
    }
  }),
).subscribe();

//This method should call after the above api completion 
this.getDriverDetails();
 }

最佳答案

为此,您可以使用 rxjs 中的 combineLatest 函数。

使用下面的代码。

public createHttpRequests(
  method: string,
  url: string,
  payload? : any,
  params? : any,

): Observable<any> {
  switch ((method).toLowerCase()) {
    case 'get':
      return this.createHttpGet(url, params);
    case 'post':
      return this.createHttpPost(url, payload);
    default:
      return this.http.get('');
  }
}
// And my service call is below:
public ngOnInit(): void {
  const userList$ = this.serviceCall.createHttpRequests('get', this.someService.getUserList, {}, {}).pipe(
    map((result: Iuserlist) => {
      if (result.body.statusCode === 200) {

      } else {

      }
    }),
  );

  const someData$ = this.serviceCall.createHttpRequests('get', this.someService.getsomeData, {}, {}).pipe(
    map((result: Isomedatas) => {
      if (result.body.statusCode === 200) {

      } else {

      }
    }),
  );

  combineLatest([userList$, someData$]).subscribe(([userList, someData]) => {
    console.log(userList);
    console.log(userList);

    this.getDriverDetails();
  });
}

关于angular - 在 Angular 9 中使可观察的调用同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63328919/

相关文章:

angular - 如何在 Angular 6 中将 JWT token 作为授权 header 发送

angular - RxJs : How to rethrow error from observable

react-native - TypeError : _rxjs. Observable.fromPromise 不是一个函数

angular - 理解观察者和订阅者angular2

javascript - 可从 Evenet mouseup 观察到的不准确

javascript - 如何从服务器对象接收消息

javascript - Angular 6 : unable to retrieve all form Control value in HTML using {{form. 值 | JSON}}

angular - Firestore 每日配额

javascript - 每个 Observable 的值发射运行一次操作

error-handling - 在合并的可观察对象上捕获错误,并在RxJS中继续其他错误