gpt4 book ai didi

javascript - 异步等待不等待函数完成

转载 作者:行者123 更新时间:2023-12-01 01:19:59 25 4
gpt4 key购买 nike

我使用 fetch 来获取数组中每个元素的数据。这些值被插入一个数组中,我想在获取所有值后返回这些值的最大值。

为此我使用了一个 promise :

 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);
});
}

我不确定我的错误在哪里,但解析发生在获取完成之前:

enter image description here

我从 console.log(response) 收到零,但我不知道为什么它不起作用。

如有任何建议,我们将不胜感激!

最佳答案

如果您要编写使用async的代码,那么您实际上应该利用async。如果需要同步运行,您可以在 for 循环中等待。如果您希望它们全部同时运行,请使用 mapPromise.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);
}

关于javascript - 异步等待不等待函数完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54316262/

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