gpt4 book ai didi

javascript - Angular JS Promise 所有顺序

转载 作者:行者123 更新时间:2023-11-30 14:20:48 24 4
gpt4 key购买 nike

我正在尝试执行 3 个带有 promise 的 Web 服务,我需要在所有这些服务都执行后,如果可能的话按顺序返回这 3 个服务的信息。我有这个。

这是我的服务

getServices(url: string): Promise < any > {
return this.http.get(CoordinadoresService.BASEURL + url)
.toPromise()
.then(response => {
return response.json();
})
.catch(err => err);
}

这是我的组件

getOffices() {
this.oficinas["coordinadores"] = [];
let data = this.util.getLocalStorage("coordinadores");
let promises = [];
if (data != undefined) {
for (let i = 0; i < Object.keys(data.coordinadores).length; i++) {
let url = `getOficinas/${data.coordinadores[Object.keys(data.coordinadores)[i]].ip}/${Object.keys(data.coordinadores)[i]}`;
promises.push(this.services.getServices(url).then(response => {
response["coordinador"] = response.coordinador;
this.oficinas["coordinadores"].push(response)
},
err => err));
}

Promise.all(promises).then(data => {
console.log('Both promises have resolved', data);
});
}
}

但在这里他还给我未定义的。为什么?

Promise.all(promises).then(data => {
console.log('Both promises have resolved', data);
});

谢谢。

最佳答案

您的实现存在一些问题。

  1. 首先,如果您使用 HttpClient,则不必映射,然后在响应中调用 json
  2. 您没有从 this.services.getServices(url)then 返回。因此 Promise.all
  3. 中没有响应

以下是修复。


import { HttpClient } from '@angular/common/http';
...
constructor(private http: HttpClient) {}
....
getServices(url: string): Promise < any > {
return this.http.get(CoordinadoresService.BASEURL + url)
.toPromise();
}

getOffices() {
this.oficinas["coordinadores"] = [];
let data = this.util.getLocalStorage("coordinadores");
let promises = [];

if (data) {

for (let i = 0; i < Object.keys(data.coordinadores).length; i++) {
let url = `getOficinas/${data.coordinadores[Object.keys(data.coordinadores)[i]].ip}/${Object.keys(data.coordinadores)[i]}`;
promises.push(this.getDataFromAPI(url));
}

Promise.all(promises).then(data => {
console.log('Both promises have resolved', data);
});
}
}

private getDataFromAPI(url) {
return this.services.getServices(url)
.then(
response => {
response["coordinador"] = response.coordinador;
this.oficinas["coordinadores"].push(response)
return response;
},
err => err
);
}

关于javascript - Angular JS Promise 所有顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52783365/

24 4 0
文章推荐: javascript - 通过对象的键对数据集进行分组并生成数组
文章推荐: javascript - 通过只传递一次 props 来多次执行状态和数组操作
文章推荐: javascript - 如何根据字符数缩放
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com