angular 的 Nativescript 不执行 Http 请求

Nativescript with angular not performing Http Requests

我正在尝试在我的 nativescript 应用程序上执行 http 请求,但是当调用 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. 手动订阅并更新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);

    }
  1. 保持相同的代码,但在你的 html 中使用 async 管道(小心!每次显示此屏幕时它都会调用你的 api,并且会调用多次对于多 asyncs)
<Label [text]="servico.text" *ngFor="let servico of servicos | async"></Label>

上下文:

HttpClient 总是从 rxjs.

return Observable 请求

Observable 是冷对象,这意味着它们不会执行任何代码,直到有人 subscribe 访问它。相反,Promises 总是在声明时执行。

考虑代码:

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 管道本质上是在 "rendered" 时调用 subscribe,在销毁时调用 unsubscribe,因此您不必自己管理它。