如何在获取中更新变量
How to update variable in fetch
const test = () => {
let shown = { total: 0, thisWeek: 0, thisWeekData: [0, 0, 0, 0, 0, 0, 0] }
modalIds.map(async (data) => {
await fetch("api/statistics/private/get?modalId=" + data.modalId)
.then((response) => response.json())
.then((data) => {
if (data.success) {
shown = DataForAllShown(shown, data, "views")
}
})
})
return shown
}
shown的值始终与初始值相同,但函数DataForAllShown()赋予了它一个新值。稍后尝试访问该变量时,它保持不变。
我知道 fetch 总是异步的,但是我如何在 fetch 之外更新变量并在 fetch 之后立即访问它?
我注意到,您 return 在承诺之外显示。同样使用 Promise.all() 对地图对象更有意义。
尝试修改如下代码:
const test = async () => {
let shown = { total: 0, thisWeek: 0, thisWeekData: [0, 0, 0, 0, 0, 0, 0] }
await Promise.all(modalIds.map(async (data) => {
let response = await fetch("api/statistics/private/get?modalId=" + data.modalId);
let jsonData = await response.json();
if (jsonData.success) {
shown= DataForAllShown(shown, jsonData, "views");
}
}));
return shown;
}
const test = () => {
let shown = { total: 0, thisWeek: 0, thisWeekData: [0, 0, 0, 0, 0, 0, 0] }
modalIds.map(async (data) => {
await fetch("api/statistics/private/get?modalId=" + data.modalId)
.then((response) => response.json())
.then((data) => {
if (data.success) {
shown = DataForAllShown(shown, data, "views")
}
})
})
return shown
}
shown的值始终与初始值相同,但函数DataForAllShown()赋予了它一个新值。稍后尝试访问该变量时,它保持不变。
我知道 fetch 总是异步的,但是我如何在 fetch 之外更新变量并在 fetch 之后立即访问它?
我注意到,您 return 在承诺之外显示。同样使用 Promise.all() 对地图对象更有意义。
尝试修改如下代码:
const test = async () => {
let shown = { total: 0, thisWeek: 0, thisWeekData: [0, 0, 0, 0, 0, 0, 0] }
await Promise.all(modalIds.map(async (data) => {
let response = await fetch("api/statistics/private/get?modalId=" + data.modalId);
let jsonData = await response.json();
if (jsonData.success) {
shown= DataForAllShown(shown, jsonData, "views");
}
}));
return shown;
}