Nativescript с угловым не выполняет Http-запросы - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь выполнить http-запросы в своем приложении на nativescript, но при вызове http.get () я ничего не получаю, ни ошибок, ни вызовов в API.

servicos.component.ts


    private servicos: Observable<Servico[]>;

    constructor(
        private servicosService: ServicosService
    ) {
        // Use the component constructor to inject providers.
        this.servicos = this.servicosService.listar();

    }

    ngOnInit(): void {
        // Init your component properties here.



    }

servicos.service.ts

@Injectable()
export class ServicosService{
    constructor(private http: HttpClient){

    }

    listar(){
        return this.http.get<any>(
            CONSTANTS.SERVER_URL + '/servicos/'
        );
    }
}

1 Ответ

2 голосов
/ 12 июня 2019

Вы создаете запрос, но никогда не подписываетесь на него!У вас есть несколько вариантов здесь:

  1. Подписаться вручную и обновить servicos
    private servicos: Servico[];

    constructor(
        private servicosService: ServicosService
    ) {
        // Use the component constructor to inject providers.
        this.servicos = this.servicosService.listar().subscribe((response) => this.servicos = response);

    }
Сохраните тот же код, но используйте async каналы в вашем html (будьте осторожны! Он будет вызывать ваши API каждый раз, когда отображается этот экран, и будет вызывать несколько раз для кратных async с)
<Label [text]="servico.text" *ngFor="let servico of servicos | async"></Label>

Контекст:

HttpClient запросы всегда возвращают Observable из rxjs.

Наблюдаемые объекты - это холодные объекты, то есть они невыполнять любой код до тех пор, пока кто-нибудь не subscribe s к нему.Напротив, Promise s всегда выполняется в тот момент, когда он объявлен.

Рассмотрим код:

const request = new Promise((resolve, reject) => {
    console.log("executing");
    resolve();
});

setTimeout(() => request.then(() => console.log("success")), 1000)

Результат в

executing
- 1s wait -
success

Теперь используется Observable:

const request = new Observable((subscriber) => {
    console.log("executing");
    subscriber.next();
    subscriber.complete();
});

setTimeout(() => request.subscribe(() => console.log("success")), 1000)

В результате:

- 1s wait -
executing
success

Труба async, по сути, вызывает subscribe, когда она «визуализируется», и unsubscribe, когда уничтожается, поэтомудолжен управлять им сам.

...