Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何处理来自慢速服务器的响应_Angular_Ionic Framework_Ionic3_Angular5_Angular7 - Fatal编程技术网

Angular 如何处理来自慢速服务器的响应

Angular 如何处理来自慢速服务器的响应,angular,ionic-framework,ionic3,angular5,angular7,Angular,Ionic Framework,Ionic3,Angular5,Angular7,我必须从服务器上获取一些数据。服务器的响应非常慢。我希望将响应存储在一个数组中,以便它可以在模板中显示。其目的是延迟将响应存储到阵列中,直到服务器返回响应 我已经尝试过setTimeout(),但是失败了 Ts文件 在控制台中, Book details inside函数显示来自服务器的响应结果 但是 函数外部的书籍详细信息显示为空。我认为您应该在函数调用的回调中执行所有操作/赋值。 - isResponce: boolean =false; ticketdetails()

我必须从服务器上获取一些数据。服务器的响应非常慢。我希望将响应存储在一个数组中,以便它可以在模板中显示。其目的是延迟将响应存储到阵列中,直到服务器返回响应

我已经尝试过setTimeout(),但是失败了

Ts文件 在控制台中, Book details inside函数显示来自服务器的响应结果 但是
函数外部的书籍详细信息显示为空。

我认为您应该在函数调用的回调中执行所有操作/赋值。
 - isResponce: boolean =false;

       ticketdetails()
       {
         this.funName = 'online_service';
         var url = { url:'bookingdetails?username=....&password=....&bookingCode=' +
   this.id};
         console.log(url);
         this.myservice.online_service(this.funName,url).subscribe(response =>
   {

        if (response.code === '1') 
          {
            this.isResponce = true;
            this.bookDetails = response`enter code here`;
            console.log('Book details inside function', this.bookDetails);
          }
         })
由于调用将是异步的,所以在您并没有从服务器得到响应之前,将不会执行进一步的代码

API调用后的代码将被执行,因此我认为API调用的设计方式应该是将其响应包装在回调中,然后使用它。 API调用后编写的代码将在该行之后立即执行,它不会等待响应到达,因为这是Java脚本的明显特性

示例:休息服务

customHttpDefaultOptions= {
     headers: new HttpHeaders({
             'Content-Type': 'application/json'
     })
};

postRestCall(requestBody, data) {
    this.httpClient.post(apiURL, requestBody, this.customHttpDefaultOptions).pipe(retry(1))
            .subscribe(response => {
            data(response);
    }, error => data(this.handleError(error)));
}
所以在这里,您还应该做一些事情,一旦响应到达,它将被包装在回调中,您可以稍后从回调中使用它

样本:

this.restService.postRestCall(requestBody, data => {
    this.his.bookDetails = data;
});
所以,如果您已经创建了某种rest服务,那么您也可以重用API调用机制,而不是编写API调用的锅炉板代码


这根本不是速度慢的问题。

您可以使用布尔值来处理它
this.restService.postRestCall(requestBody, data => {
    this.his.bookDetails = data;
});