实际上,我有15个http请求被发送到API。我想一个接一个地处理响应,并在请求结束时打印响应。
服务端:
@Module
public class MyModule {
@Provides
@Singleton
MyApi providesMyApi() {
return new MyApi();
}
}
组件侧:
findOneByOne(): Promise<any> {
const promises = [];
this.getCardsPath().forEach(element => {
promises.push(this.getPromises(element));
});
return Promise.all(promises)
.then((res) => res)
.catch(err => err);
}
getPromises(str: String): Promise<any> {
return this.requester.obtain({
restUrl: "/administration/" + str,
method: RequestMethod.Get
})
.toPromise()
.then(res => this.checkInfoService(res.json()))
.catch(err => err);
}
我是Angular的初学者,所以我真的不知道如何处理多重承诺。
在此先感谢您的帮助:)
答案 0 :(得分:2)
尝试一下:
findOneByOne() {
const calls = this.getCardsPath().map(el => this.getPromises(el));
forkJoin(calls).subscribe(responses => {...});
}
responses
将包含每个响应,从第一次调用到最后一个调用:responses[0]
将是第一个元素的响应,依此类推。
答案 1 :(得分:0)
您可以使用Observable的zip运算符,您可以在其中压缩我们所有的15个API调用,并按压缩顺序将响应以数组的形式获取。
有关zip运算符的更多信息:https://www.learnrxjs.io/operators/combination/zip.html
答案 2 :(得分:0)
您可以使用 async / await
api请求示例
export function getData(data) {
return of(data)
.pipe(delay(2000))
.toPromise()
}
组件
async display() {
let first = await getData('first call');
console.log(first);
let second = await getData('second call')
console.log(second)
}
您需要使用
async
标记方法,以使用await并将任何可观察到的转换为promise
作为api请求的示例