您如何适当地使用依赖于其他请求的GET请求?

时间:2019-06-11 17:48:26

标签: angular asynchronous promise

我正在尝试正确执行一些异步调用。我基本上有类似如下的内容,以便依次getData1,然后getData2,最后userCheck

for (const item of someArray) {
  this.getData1(item, userID).then(() =>
    this.getData2(item, userID).then(() =>
      this.userCheck(item)
    )
  );
}

,然后在getData1getData2内部,我订阅了我创建的服务中的GET请求。我有一个功能正常工作,因为它只是一个简单的Get请求。我在使用其他功能时遇到麻烦。基本上是三个GET请求,其中第二个呼叫依赖于第一个,而第三个呼叫依赖于第二个。我已经结合了promise和then语句来尝试实现这一目标,但是它仍然无法正常工作。我不工作的人尝试了几种不同的方法,但是没有运气。我的功能目前看起来像这样。

getData2(user: string, id: string)
    {
        return new Promise((resolve, reject) =>
        {
            var status: string;

            this._apiService.getAssertion(id).toPromise().then((data: any) =>
            {
                let assert = data.toString();
                console.log(assert);
                this._apiService.getToken(assert, user).toPromise().then((data: any) =>
                {
                    let tkn = data.access_token.toString();
                    console.log(tkn);
                    this._apiService.ccMeta(tkn, guid).toPromise().then((information: any) =>
                    {
                        parseString(information, (err, result) =>
                        {
                            if (err)
                            {
                                throw new Error(err);
                            }
                            else
                            {
                                status = result['entry']
                                this.ccData.push(
                                {
                                    key: 'userStatus',
                                    value: status
                                })
                            }
                        });
                    });
                });
            }).then(() =>
                resolve()).then();
        })

1 个答案:

答案 0 :(得分:-1)

您可以使用一些Rxjs来代替Promise。

import { concatMap } from 'rxjs/operators';

this.http.post(someURL, httpOptions1).pipe(
   concatMap(res => {
      return this.http.get('second/req/url');
   }),
   concatMap(resFromSecondReq => {
      return this.http.get('third/req/url');
   })
).subscribe(resFromThirdReq => console.log('All requests successsful'));