如何通过 RXJS 链传递参数?
How can I pass parameters through RXJS chain?
我有一个包含 3 个项目的数组:
arrActions: Array<Item> = [{ url: 'http://1.com', data: '5' },
{ url: 'http://2.com', data: '6' },
{ url: 'http://3.com', data: '7' }];
我想为每个项目执行一个 Ajax 请求。那没问题 。但我还需要知道我在 subscribe
回调中处理的是哪个项目。
这是我试过的:
from(this.arrActions).pipe(
mergeMap((i) => this.ajaxAlike(i)))
.subscribe(data => {
console.log(data)
});
这个returns:
但我不知道每个回调与哪个请求相关。
所以我想也许是这样的:
from(this.arrActions).pipe(
mergeMap((i) =>(of({data:i.data, url: this.ajaxAlike(i.url)}))))
.subscribe(data => {
console.log(data)
});
但是现在,http 没有执行:
此外,我想我走错了路。
问题:
我如何调用所有网址,并在 subscribe
处同时获得 http
结果 + item
本身?
您可以在收到每个结果后将其映射:
from(this.arrActions)
.pipe(
mergeMap((i) => this.ajaxAlike(i)
.pipe(
map(result => ({ data: i.data, result })),
)
)
)
.subscribe(data => {
console.log(data)
}, err => {
console.log(' error which is ->', err);
});
这将打印以下输出:
{data: "5", result: "httpResponse"}
{data: "6", result: "httpResponse"}
{data: "7", result: "httpResponse"}
您更新了演示:https://stackblitz.com/edit/angular-http-client-y43j1w?file=app/app.component.ts
我有一个包含 3 个项目的数组:
arrActions: Array<Item> = [{ url: 'http://1.com', data: '5' },
{ url: 'http://2.com', data: '6' },
{ url: 'http://3.com', data: '7' }];
我想为每个项目执行一个 Ajax 请求。那没问题 。但我还需要知道我在 subscribe
回调中处理的是哪个项目。
这是我试过的:
from(this.arrActions).pipe(
mergeMap((i) => this.ajaxAlike(i)))
.subscribe(data => {
console.log(data)
});
这个returns:
但我不知道每个回调与哪个请求相关。
所以我想也许是这样的:
from(this.arrActions).pipe(
mergeMap((i) =>(of({data:i.data, url: this.ajaxAlike(i.url)}))))
.subscribe(data => {
console.log(data)
});
但是现在,http 没有执行:
此外,我想我走错了路。
问题:
我如何调用所有网址,并在 subscribe
处同时获得 http
结果 + item
本身?
您可以在收到每个结果后将其映射:
from(this.arrActions)
.pipe(
mergeMap((i) => this.ajaxAlike(i)
.pipe(
map(result => ({ data: i.data, result })),
)
)
)
.subscribe(data => {
console.log(data)
}, err => {
console.log(' error which is ->', err);
});
这将打印以下输出:
{data: "5", result: "httpResponse"}
{data: "6", result: "httpResponse"}
{data: "7", result: "httpResponse"}
您更新了演示:https://stackblitz.com/edit/angular-http-client-y43j1w?file=app/app.component.ts