Hello Guys我有以下问题:
我需要向我的JIRA-Server发送多个POST-Requets来创建子任务问题。这是我的代码:
this.js.createEpic().subscribe(res => {
this.js.createWorkPackages(res.key, 'CR XYZ | v1.x | Setup - Template').subscribe(res => {
})
this.js.createWorkPackages(res.key, 'CR XYZ | v1.x | Implementation - Template').subscribe(res => {
})
this.js.createWorkPackages(res.key, 'CR XYZ | v1.x | Test Preparation - Template').subscribe(res => {
})
问题是请求没有在订单中完成。我知道他们是异步的。但在JIRA中,票证订单依赖于,首先创建哪个票证。所以我需要我的门票这个订单。有可能这样做吗?我不想同步地执行请求,所以当第一个请求完成时我会调用第二个请求...这需要花费很多时间,因为我有很多子标记。
Summaray:我想要JIRA的异步请求,但是需要精确的Finishing-Order。希望你能帮助我...抱歉我的英语不好
答案 0 :(得分:0)
如果您尝试同时触发每个请求并等待每个请求完成,请按以下步骤操作:
let setup$ = this.js.createWorkPackages(res.key, 'CR XYZ | v1.x | Setup - Template');
let implementation$ = this.js.createWorkPackages(res.key, 'CR XYZ | v1.x | Implementation - Template');
let test$ = this.js.createWorkPackages(res.key, 'CR XYZ | v1.x | Test Preparation - Template');
// launch the 3 requests at the same time
// and wait for the 3 answers before doing anything
setup$
.combineLatest(implementation$, test$)
.map(values => {
// you now have access to the result of every request
const [setup, implementation, test] = values;
console.log(
setup,
implementation,
test
);
})
.subscribe();
警告:
请记住,Angular2不会自动取消订阅(除非您使用async
管道)。
所以你应该像那样保存setup$....subscribe();
:
private requestSubscription: Subscription;
...
this.requestSubscription = setup$....subscribe();
在你的ngOnDestroy方法中调用unsubscribe:
this.requestSubscription.unsubscribe();
编辑1: 回应评论:
是的,但第二个请求只会在第一个请求完成时开始。所以我们不能兼职并节省时间..
不,两个请求将同时被触发并并行执行。
这是一个演示:
let d1 = Math.floor(Date.now());
let r1 = Rx
.Observable.of('First request response')
.do(x => console.log('Starting request 1 (will take 2s)'))
.delay(2000);
let r2 = Rx
.Observable.of('Second request response')
.do(x => console.log('Starting request 2 (will take 5s)'))
.delay(5000);
r1.combineLatest(r2).map(([val1, val2]) => {
let d2 = Math.floor(Date.now());
console.log('Both request are now done');
console.log('It took : ' + (d2 - d1) + ' ms in total');
console.warn('Response from request 1 :');
console.log(val1);
console.warn('Response from request 2');
console.log(val2);
}).subscribe();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://npmcdn.com/rxjs@5.0.0-beta.7/bundles/Rx.umd.js"></script>
正如您在演示结果中看到的那样,两个请求的起始时间仅为2毫秒。
当请求1占用2s,请求2占用5s时,我们在5s后发出消息说已经完成了。
所以是的,两个请求都被同时发出,我们等待两个请求完成。