我使用访存来获取数组中每个元素的数据。这些值被压入一个数组中,一旦获取所有值,我想返回这些值的最大值。
为此,我使用了一个承诺:
async function init() {
await maxWaste(nut0Codes).then(response => {
console.log(response);
});
}
function maxWaste(nutCodes) {
return new Promise(resolve => {
let waste = [];
nutCodes.forEach((element) => {
let query = queryMaxWaste(element);
fetch(address + encodeURIComponent(query))
.then(response => {
return response.json();
})
.then(response => {
waste.push(response.results.bindings[0].wasteGeneration.value);
console.log(waste);
});
});
let maxWaste = Math.max(waste);
resolve(maxWaste);
});
}
我不确定我的错误在哪里,但是解决是在完成提取之前发生的:
我从console.log(response)
收到零,但我不知道为什么它不起作用。
任何建议将不胜感激!
答案 0 :(得分:2)
如果要编写使用async
的代码,则应实际使用async
。如果需要同步运行,可以在for循环中等待。如果希望它们同时运行,请使用map
和Promise.all
。
async function init() {
const response = await maxWaste(nut0Codes);
console.log(response);
}
async function maxWaste(nutCode) {
const waste = [];
for (const element in nutCode) {
const query = queryMaxWaste(element);
const response = await fetch(address + encodeURIComponent(query));
const json = await response.json();
waste.push(json.results.bindings[0].wasteGeneration.value);
console.log(waste);
}
const maxWaste = Math.max(waste);
return maxWaste;
}
您还可以尝试这样编写代码,以免在运行下一个fetch
之前不必等待每个响应完成:
async function init() {
const response = await maxWaste(nut0Codes);
console.log(response);
}
async function maxWaste(nutCode) {
const waste = await Promise.all(nutCode.map(async element => {
const query = queryMaxWaste(element);
const response = await fetch(address + encodeURIComponent(query));
const json = await response.json();
return json.results.bindings[0].wasteGeneration.value;
}));
return Math.max(waste);
}