如何在订阅中获取观察者的结果?
How to get result of Observer in subscribe?
我对服务器有两个 Observable
请求:
this.initService.__init__(res).subscribe((profile) => {
console.log(profile); // It works
this.initService.initializePeriod(profile).subscribe((period) => {
console.log(period); // It does not work
});
});
当第一次收到响应时,它会调用第二次,但我无法获得第二次订阅的结果。我知道,在这种情况下最好使用 Promises,但我需要将第一个请求的结果传递给第二个,promises 不允许这样做。
我试过使用这个,但是警告消息不起作用:
this.initService.__init__(res)
.pipe(
mergeMap(profile => this.initService.initializePeriod(profile)))
.subscribe((response) => {
alert('aa');
});
也试过这个:
this.initService.__init__(res)
.mergeMap(profile => this.initService.initializePeriod(profile))
.subscribe((response) => {
alert('aa');
});
您可以使用 switchMap
rxjs 运算符来链接可观察对象。
import { switchMap } from 'rxjs/operators';
this.initService.__init__(res)
.pipe(
switchMap(profile=> this.initService.initializePeriod(profile))
).subscribe((period) => {
console.log(period);
});
如果你想得到双方的回应,那么使用mergeMap
import { mergeMap } from 'rxjs/operators';
this.initService.__init__(res)
.pipe(
mergeMap(
profile=> this.initService.initializePeriod(profile),
(profile, period) => {
return [profile,period];
}
)
).subscribe((response) => {
console.log(response[0]); //profile
console.log(response[1]); //period
});
您需要检查第一次 API 通话(个人资料)的结果。检查您的浏览器控制台。很有可能配置文件是 JSON,而不是有效的 URL。如果 URL 无效,请求将不会通过。
如果您提供有效的 URL,API 调用在另一个 API 调用中应该有效。
我对服务器有两个 Observable
请求:
this.initService.__init__(res).subscribe((profile) => {
console.log(profile); // It works
this.initService.initializePeriod(profile).subscribe((period) => {
console.log(period); // It does not work
});
});
当第一次收到响应时,它会调用第二次,但我无法获得第二次订阅的结果。我知道,在这种情况下最好使用 Promises,但我需要将第一个请求的结果传递给第二个,promises 不允许这样做。
我试过使用这个,但是警告消息不起作用:
this.initService.__init__(res)
.pipe(
mergeMap(profile => this.initService.initializePeriod(profile)))
.subscribe((response) => {
alert('aa');
});
也试过这个:
this.initService.__init__(res)
.mergeMap(profile => this.initService.initializePeriod(profile))
.subscribe((response) => {
alert('aa');
});
您可以使用 switchMap
rxjs 运算符来链接可观察对象。
import { switchMap } from 'rxjs/operators';
this.initService.__init__(res)
.pipe(
switchMap(profile=> this.initService.initializePeriod(profile))
).subscribe((period) => {
console.log(period);
});
如果你想得到双方的回应,那么使用mergeMap
import { mergeMap } from 'rxjs/operators';
this.initService.__init__(res)
.pipe(
mergeMap(
profile=> this.initService.initializePeriod(profile),
(profile, period) => {
return [profile,period];
}
)
).subscribe((response) => {
console.log(response[0]); //profile
console.log(response[1]); //period
});
您需要检查第一次 API 通话(个人资料)的结果。检查您的浏览器控制台。很有可能配置文件是 JSON,而不是有效的 URL。如果 URL 无效,请求将不会通过。
如果您提供有效的 URL,API 调用在另一个 API 调用中应该有效。