2 回答

TA贡献1868条经验 获得超4个赞
获取请求是异步的。这意味着当您调用fetch它时可能需要一段时间才能完成它,因此 JavaScript 允许其余代码继续执行而不会阻塞。因此,在您的请求完成之前将任何内容记录到控制台显然会导致一个空数组。
此外,数组是基于索引的,而不是基于 JavaScript 的名称。但是,由于数组本质上是对象,所以它仍然可以工作,但您永远不应该执行以下操作。
var rental = [];
rental['id'] = 'foo';
console.log(rental['id']);
而是使用一个普通的对象,该对象旨在以这种方式使用。
var rental = {};
rental['id'] = 'foo';
console.log(rental['id']);
在你的最后一个例子中,你似乎做的一切都很好。您确定您的 fetched在其结构data中没有值吗?undefined这将有助于查看数据的样子。

TA贡献1802条经验 获得超5个赞
答案:我的代码中有 2 个错误。- 首先,我没有正确考虑代码的异步性质。- 其次,当试图用另一个修复它时,然后阻止并在那里执行我的代码。我没有在进程 then 块中返回值,而是返回了 forEach。
fetch(url)
.then(resp => resp.json())
.then(data => {
var rentalStatus;
Object.keys(data).forEach(key => {
rental[key] = data[key];
if(key == "status") {
rentalStatus = data[key];
}
})
return rentalStatus;
})
.then(rentalStatus => {
console.log(rental["id"]); // This does return the id now!
if(rentalStatus == "Reserved") {
$("#assign-items").removeClass("d-none");
}
}).catch(error => {
console.log("Error:" + error);
});
添加回答
举报