Javascript 不等待在http get请求上从服务器获取数据
嗨,我在端口A上有本地服务器,在端口4200上有单个web应用 服务器有一些我通过http请求的数据 data.service.ts: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
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-帮什么忙?