我答应阵有问题:我在交换机内调用一个函数,该函数从API加载一个数组。示例:
let sorted = []
let limit = 10
async function loadPage(slcLimit) {
let i
let filter = document.getElementById("show-filter").value
if (sorted.length == 0) {
switch (filter) {
case "1":
let realWoolPromiseAsc = await Promise.resolve(realWool(pagingPouches))
.then((realWoolArr) => {
sorted = realWoolArr.sort((a, b) => parseFloat(a.realWool) - parseFloat(b.realWool));
return sorted
})
break;
case "2":
let realWoolPromiseDesc = await Promise.resolve(realWool(pagingPouches))
.then((realWoolArr) => {
sorted = realWoolArr.sort((a, b) => parseFloat(b.realWool) - parseFloat(a.realWool));
return sorted
})
break;
}
}
for (i = startingLimit; i < (startingLimit + limit); i++) {
console.log(sorted[i].ID + " - " + sorted[i].price)
}
}
真毛功能
window.realWool = async function realWool(pouchArr) {
let divider = 1000000000000000000n;
let realWoolArray = []
pouchArr.forEach(async pouch => {
let availAmount = await pouchContract.amountAvailable(pouch.pouchID)
availAmount = Number(BigInt(availAmount.toString()) * 100n / divider) / 100
availAmount = Math.floor(availAmount * 100) / 100
let rWool = pouch.pouchWool - availAmount
realWoolArray.push({pouchID: pouch.pouchID, realWool: rWool, pouchTime: pouch.pouchTime})
//document.getElementById("lockedText" + pouch.pouchID).innerHTML = "Real WOOL: <span class='black'>" + rWool + "</span>"
});
return realWoolArray
}
我需要在for循环中使用sorting数组,但我没有定义。我知道我需要使用await或then块,但我不知道如何使用。
谢谢你,谢谢你
我使用了一个timeout,但它不是最佳的,因为有时函数只返回5个对象的数组,有时返回数百个对象(取决于过滤器)
setTimeout(() => {
for (i = startingLimit; i < (startingLimit + limit); i++) {
console.log(sorted[i].ID + " - " + sorted[i].price)
}
}, 5000);
2条答案
按热度按时间tmb3ates1#
您需要从
then
块返回。并正确拼写
length
。您也不需要在
then
区块中设定sorting
范围的模块。您也不需要
await Promise.resolve
,只需等待realWool
即可。luaexgnf2#
在
loadPage
函数中使用的数组sorted
是一个全局变量,这意味着loadPage
的所有调用(我假设每个传入的请求都会导致一个调用)都将并发访问同一个数组,这不能产生正确的(甚至是可预测的)结果。将
let sorted = []
放入函数体中,使其成为局部函数,并且函数必须返回一些内容,例如return realWoolPromiseAsc
。