Я вызываю POST API с помощью службы Angular 5
Сервисный файл
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders, HttpErrorResponse, HttpClientModule } from '@angular/common/http';
import { Http, Response } from '@angular/http';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';
import 'rxjs/add/operator/map';
import { Observable } from 'rxjs/Observable';
import { HttpResponse } from 'selenium-webdriver/http';
import { IScheduleAPI } from '../interfaces/ischeduleAPI';
// import { Ischedule } from '../interfaces/ischedule';
@Injectable()
export class SchedulesService {
apiURL = 'http://localhost:57863/api/Audit/';
ScheduleDetail: IScheduleAPI[] = [];
constructor(private http: Http) { }
GetScheduleAPI(params, httpOptions) {
return this.http.post<IScheduleAPI[]>(this.apiURL, params, httpOptions)
.catch(this.errorHandler);
}
errorHandler(error: HttpErrorResponse) {
return Observable.throw(error.message || 'Server Error');
}
}
Я вызываю эту службу в своем Компоненте
import { Component, OnInit } from '@angular/core';
import { HttpClientModule, HttpHeaders } from '@angular/common/http';
import { IScheduleAPI } from '../interfaces/ischeduleAPI';
import { SchedulesService } from '../services/schedules.service';
import { Http, Response } from '@angular/http';
@Component({
selector: 'app-schedules',
templateUrl: './schedules.component.html',
styleUrls: ['./schedules.component.css']
})
export class SchedulesComponent implements OnInit {
Schedule: IScheduleAPI[];
message: string;
constructor(private sch: SchedulesService, private http: Http) { }
ngOnInit() {
const params = [{
'ActionMethod': 'GetSchedule',
'StaffCode': 'NA',
'Password': 'NA'
}];
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json'
})
};
this.sch.GetScheduleAPI(params, httpOptions).subscribe(data => this.Schedule = data,
error => this.message = error);
}
}
Теперь проблемы
1.] Он показывает ошибку, что ожидаемых аргументов типа 0, но 1 в строке
return this.http.post<IScheduleAPI[]>(this.apiURL, params, httpOptions)
Его внутренний служебный файл, это разметка, которую я использую из другого служебного файла, где он работает нормально.
После удаления IScheduleAPI [] он перестает показывать ошибку, но не обращается к API, а вместо этого показывает ошибку
Я использую Angular 5
Http устарел, используйте вместо него HttpClient.
Просто замените constructor(private http: Http) { } на constructor(private http: HttpClient) { }. Похоже, у вас уже есть правильный импорт
@David, он компилируется с HttpClient и попадает в api, но не ждет, пока api вернет результат, выполняя другой оператор до возврата результата
@Jack: какой код выполняется перед возвратом? Вы ведь знаете, что HTTP-запросы асинхронны?
@David этот сервисный вызов находится в ngOnInit, см. Мой код. Его результат должен быть возвращен в ngOnInit, как мне его синхронизировать?
Извините, я не понимаю. После вызова GetScheduleAPI в ngOnInit в вашем коде ничего нет. Если вы хотите добавить что-то сразу после вызова, но чтобы оно выполнялось только после возврата http-запроса, вы можете преобразовать свой код для использования promises и await.async.
вы можете попробовать с httpclient ??





Похоже, вы используете новый HttpClient везде, но только в конструкторе.
Все, что вам нужно сделать, это заменить
constructor(private http: Http) { }
с участием
constructor(private http: HttpClient) { }
как в SchedulesService, так и в SchedulesComponent
Вы смешиваете как старые модули Http, так и новые модули HttpClient.