我正在尝试正确执行一些异步调用。我基本上有类似如下的内容,以便依次getData1
,然后getData2
,最后userCheck
:
for (const item of someArray) {
this.getData1(item, userID).then(() =>
this.getData2(item, userID).then(() =>
this.userCheck(item)
)
);
}
,然后在getData1
和getData2
内部,我订阅了我创建的服务中的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();
})
答案 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'));