gpt4 book ai didi

javascript - 如何获取对象列表并等待它们完成?

转载 作者:行者123 更新时间:2023-11-29 10:30:56 24 4
gpt4 key购买 nike

我有一个要遵循的 url 列表,并想将结果存储在一个数组中。当前的实现是使用 map 来获取并使用 when.all 来等待。如下所示:

        const when = require('when');

}).then((responseJson) => {
return responseJson._embedded.leases.map(
lease => fetch(lease._links.self.href, {headers: {'Access-Control-Expose-Headers': 'ETag'}}));
}).then(leasePromises => {
return when.all(leasePromises);
}).then((leases) => {
var obj = leases.toString();
console.log("leasesJSON = " + obj);
console.log("leases[0]0= " + leases[0]);
console.log("leases[0]1= " + JSON.stringify(leases[0]));
console.log("leases[0]2= " + leases[0].json());
console.log("leases[0]3= " + JSON.stringify(leases[0].json()));
this.setState({
isLoading: false,
leases: leases,
attributes: Object.keys(this.schema.properties)
});
}).catch((error) => {
console.error("loadDataFromServer error = " + error);
});

但是 render() 方法提示“租约”对象是空的。

追踪结果:

leasesJSON = [object Response],[object Response]
leases[0]0= [object Response]
leases[0]1= {}
leases[0]2= [object Promise]
leases[0]3= {}

所以我的问题是:

  1. 如何打印 promise 和响应信息?
  2. 我获取对象列表的方式是否正确?
  3. 如果不是那么如何纠正它们?

最佳答案

获取 API 的响应有 .json() 方法(如您所知),它是异步的;它返回一个 promise 。
因此,您必须等待它才能从服务器返回实际对象;这可能是导致您出现问题的原因。

}).then((responseJson) => {
return responseJson._embedded.leases.map(
lease => fetch(lease._links.self.href, {headers: {'Access-Control-Expose-Headers': 'ETag'}}));
}).then(leasePromises => {
return when.all(leasePromises);
}).then(leasesResponses => {
return when.all(leasesResponses.map(response => response.json()));
}).then(leases => {
// leases is finally what you expected them to be!
})

API 是以这种方式构建的,因为这样您就可以立即对响应状态/ header 采取行动,而无需等待响应主体被完全下载/解析。

关于javascript - 如何获取对象列表并等待它们完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46270072/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com