如果运行以下代码,则会收到错误TypeError: Object(...)(...).subscribe is not a function
。
push(models: Model[]): void {
from(models).pipe(
mergeMap((m: Model) => this.service.push(m)),
bufferCount(models.length)
).subscribe(() => log('done'));
}
我想要实现的是将每个模型并行推送到服务器。当所有推送完成后,我会记录一条消息。
有什么想法吗?
答案 0 :(得分:0)
这里有一些简化的代码可以满足您的需求。
重要的一点是服务中的push方法。显然,您需要更改它以匹配您发出的HTTP请求。 console.log
中的ngOnInit
语句记录所有响应完成后的所有服务器响应的列表。
.ts:
import { Component, OnInit } from '@angular/core'
import { PushItService } from './push-it.service'
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
public myObservable$
constructor(private pushItService: PushItService) {}
ngOnInit() {
this.myObservable$ = this.pushItService.push([{id: 1}, {id: 2}, {id: 3}])
this.myObservable$.subscribe((data) => {
console.log('data', data)
})
}
}
.service.ts:
import { Injectable } from '@angular/core'
import { HttpClient } from '@angular/common/http'
import { forkJoin, of } from 'rxjs'
import { mergeMap } from 'rxjs/operators'
@Injectable({
providedIn: 'root'
})
export class PushItService {
constructor(private http: HttpClient) {}
push(arr) {
return of(arr).pipe(
mergeMap(value => forkJoin(value.map(v => this.http.get('http://localhost:3000/random/' + v.id))))
)
}
}
我使用此资源编写了此代码... https://www.learnrxjs.io/operators/combination/forkjoin.html ...参见示例2
已经对此进行了测试,并且可以正常工作,但是您应该引入一些错误处理。 This will help you too