rxjs:链接异步请求
rxjs: Chaining Async Requests
我是 rxjs 的新手,我需要调用 3 个异步请求,这些请求以 promises 开始,并将返回的对象按照调用顺序放入数组中。这是我的(部分基于 ):
let observeFront = Observable.fromPromise(this.requestAsync(frontSlice, "front"));
let observeMiddle = Observable.fromPromise(this.requestAsync(midSlice, "middle"));
let observeEnd = Observable.fromPromise(this.requestAsync(endSlice, "end"));
let observeCombined = Observable.concat(observeFront, observeMiddle, observeEnd);
observeCombined.subscribe(data => {
// this logs only one object - need all 3 in proper order
console.log(data);
this.resultsEmitter.emit(data)
});
observeFront.subscribe(response => {
// logs the correct object
console.log("front result:", response);
});
observeMiddle.subscribe(response => {
// correct
console.log("middle result:", response);
});
observeEnd.subscribe(response => {
// correct
console.log("end result:", response);
});
如何仅在我有 [frontOb, middleObj, endObj]
时发出结果?
正如@Eric 建议的那样,您可以使用 forkJoin()
而不是 concat()
:
let observeFront = Observable.fromPromise(this.requestAsync(frontSlice, "front"));
let observeMiddle = Observable.fromPromise(this.requestAsync(midSlice, "middle"));
let observeEnd = Observable.fromPromise(this.requestAsync(endSlice, "end"));
let observeJoined = Observable.forkJoin(observeFront, observeMiddle, observeEnd);
observeJoined.subscribe(data => {
console.log(data); // => [frontOb, middleObj, endObj]
this.resultsEmitter.emit(data)
});
我是 rxjs 的新手,我需要调用 3 个异步请求,这些请求以 promises 开始,并将返回的对象按照调用顺序放入数组中。这是我的(部分基于
let observeFront = Observable.fromPromise(this.requestAsync(frontSlice, "front"));
let observeMiddle = Observable.fromPromise(this.requestAsync(midSlice, "middle"));
let observeEnd = Observable.fromPromise(this.requestAsync(endSlice, "end"));
let observeCombined = Observable.concat(observeFront, observeMiddle, observeEnd);
observeCombined.subscribe(data => {
// this logs only one object - need all 3 in proper order
console.log(data);
this.resultsEmitter.emit(data)
});
observeFront.subscribe(response => {
// logs the correct object
console.log("front result:", response);
});
observeMiddle.subscribe(response => {
// correct
console.log("middle result:", response);
});
observeEnd.subscribe(response => {
// correct
console.log("end result:", response);
});
如何仅在我有 [frontOb, middleObj, endObj]
时发出结果?
正如@Eric 建议的那样,您可以使用 forkJoin()
而不是 concat()
:
let observeFront = Observable.fromPromise(this.requestAsync(frontSlice, "front"));
let observeMiddle = Observable.fromPromise(this.requestAsync(midSlice, "middle"));
let observeEnd = Observable.fromPromise(this.requestAsync(endSlice, "end"));
let observeJoined = Observable.forkJoin(observeFront, observeMiddle, observeEnd);
observeJoined.subscribe(data => {
console.log(data); // => [frontOb, middleObj, endObj]
this.resultsEmitter.emit(data)
});