javascript,nodejs正在等待承诺数组

wsxa1bj1  于 2022-11-27  发布在  Java
关注(0)|答案(2)|浏览(154)

我答应阵有问题:我在交换机内调用一个函数,该函数从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);
tmb3ates

tmb3ates1#

您需要从then块返回。
并正确拼写length
您也不需要在then区块中设定sorting范围的模块。

let promisedArray = await Promise.resolve(myFunction())
     .then((realArray) => {
         sorting = realArray.sort((a, b) => parseFloat(a.price) - parseFloat(b.price));
        
         return sorting // <-- return to awaited value
      })

      for (let i = 0; i < promisedArray.length; i++) { <-- check spelling
         console.log(promisedArray[i]) //returns the value I need
        }

您也不需要await Promise.resolve,只需等待realWool即可。

luaexgnf

luaexgnf2#

loadPage函数中使用的数组sorted是一个全局变量,这意味着loadPage的所有调用(我假设每个传入的请求都会导致一个调用)都将并发访问同一个数组,这不能产生正确的(甚至是可预测的)结果。
let sorted = []放入函数体中,使其成为局部函数,并且函数必须返回一些内容,例如return realWoolPromiseAsc

相关问题