Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.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
Javascript 不等待在http get请求上从服务器获取数据_Javascript_Angular_Rest_Es6 Promise - Fatal编程技术网

Javascript 不等待在http get请求上从服务器获取数据

Javascript 不等待在http get请求上从服务器获取数据,javascript,angular,rest,es6-promise,Javascript,Angular,Rest,Es6 Promise,嗨,我在端口A上有本地服务器,在端口4200上有单个web应用 服务器有一些我通过http请求的数据 data.service.ts: export class DataService { constructor(private httpClient: HttpClient) {} async get_p() { return await this.httpClient.get<object[]>('/some api').toPro

嗨,我在端口A上有本地服务器,在端口4200上有单个web应用 服务器有一些我通过http请求的数据

data.service.ts:

    export class DataService {
      constructor(private httpClient: HttpClient) {}

      async get_p() {
        return await this.httpClient.get<object[]>('/some api').toPromise();
      }

      async get_s() {
        return await this.httpClient.get<object[]>('/some api').toPromise();
      }
    }
这里有一些错误消息,但它们指的是p和s都没有初始化的事实

通过在构造函数中执行这些请求,我已经检查了数据是否来自服务器,然后将它们移动到init函数


谢谢您的
p1
p2
承诺没有任何解析值,因为
.then()
处理程序将
结果
分配给
this.s
this.p
,但它们不返回任何内容,因此
p1
p2
的解析值是
未定义的。请记住,来自
.then()
处理程序的返回值将成为承诺的解析值

因此,当您这样做时:

Promise.all([p1, p2]).then(values => {
    console.log(values); ///undefined
});
Promise.all([p1, p2]).then(values => {
    console.log(this.p, this.s);
});
所有
都将是一个
未定义的数组
。如果相反,请执行以下操作:

Promise.all([p1, p2]).then(values => {
    console.log(values); ///undefined
});
Promise.all([p1, p2]).then(values => {
    console.log(this.p, this.s);
});
你应该看到你的价值观。或者,您也可以实际从
.then()
处理程序返回这些值,然后每个承诺都有一个解析值

      init() {
        let p1 =this.dataService.get_s().then((result) => {
            this.s = result; 
            return result;  // set resolved value of promise
        });
        let p2 = this.dataService.get_p().then((result) => {
             this.p = result; 
             return result;  // set resolved value of promise
        });

        Promise.all([p1, p2]).then(values => {
          console.log(values); // will show the resolved values now
        });

你能帮我一下吗@jfriend@Profer-帮什么忙?