javascript - Hur synkroniserar man Angular2 http get?
Jag förstår att genom att använda observable kan jag köra en metod när förfrågan är klar, men hur kan jag vänta tills en HTTP GET är klar och returnera svaret när jag använder ng2 HTTP?
getAllUser(): Array<UserDTO> {
this.value = new Array<UserDTO>();
this.http.get("MY_URL")
.map(res => res.json())
.subscribe(
data => this.value = data,
err => console.log(err),
() => console.log("Completed")
);
return this.value;
}
Värdet kommer att vara null när det returneras eftersom get är asynkron.
Svar #1
din tjänsteklass: /project/app/services/sampleservice.ts
@Injectable()
export class SampleService {
constructor(private http: Http) {
}
private createAuthorizationHeader() {
return new Headers({'Authorization': 'Basic ZXBossffDFC++=='});
}
getAll(): Observable<any[]> {
const url='';
const active = 'status/active';
const header = { headers: this.createAuthorizationHeader() };
return this.http.get(url + active, header)
.map(
res => {
return res.json();
});
}
}
din komponent: /project/app/components/samplecomponent.ts
export class SampleComponent implements OnInit {
constructor(private sampleservice: SampleService) {
}
ngOnInit() {
this.dataset();
}
dataset(){
this.sampleservice.getAll().subscribe(
(res) => {
// map Your response with model class
// do Stuff Here or create method
this.create(res);
},
(err) => { }
);
}
create(data){
// do Your Stuff Here
}
}
Svar #2
Genom att titta på Angular-källkoden (https://github.com/angular/angular/blob/master/packages/http/src/backends/xhr_backend.ts#L46) är det tydligt att attributet async i XMLHttpRequest inte används. Den tredje parametern i XMLHttpRequest måste sättas till "false" för synkrona förfrågningar.
