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);
});
添加回答
舉報